diff --git a/.github/workflows/check_version.yml b/.github/workflows/check_version.yml index 42051866..871d5fcc 100644 --- a/.github/workflows/check_version.yml +++ b/.github/workflows/check_version.yml @@ -6,6 +6,8 @@ on: branches: - main - develop + - master # for safety reasons + - dev # for safety reasons jobs: configure: @@ -22,13 +24,11 @@ jobs: container: image: zondax/ledger-app-builder:latest options: --user ${{ needs.configure.outputs.uid_gid }} - env: - SDK_VARNAME: NANOSP_SDK outputs: version: ${{ steps.store-version.outputs.version }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: true - run: make version diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index f7a7a889..f89cd4dd 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -7,20 +7,22 @@ on: branches: - main - develop + - master # for safety reasons + - dev # for safety reasons jobs: analyse: name: Analyse strategy: matrix: - sdk: ["$NANOS_SDK", "$NANOX_SDK", "$NANOSP_SDK"] + sdk: ["$NANOS_SDK", "$NANOX_SDK", "$NANOSP_SDK", "$STAX_SDK"] runs-on: ubuntu-latest container: image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder-legacy:latest steps: - name: Clone - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: recursive @@ -31,6 +33,7 @@ jobs: queries: security-and-quality - name: Build - run: make -j BOLOS_SDK=${{ matrix.sdk }} + run: | + make -j BOLOS_SDK=${{ matrix.sdk }} - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/guidelines_enforcer.yml b/.github/workflows/guidelines_enforcer.yml index fdaf9f27..ea48139b 100644 --- a/.github/workflows/guidelines_enforcer.yml +++ b/.github/workflows/guidelines_enforcer.yml @@ -12,12 +12,14 @@ on: workflow_dispatch: push: branches: - - master - main - develop + - master # for safety reasons + - dev # for safety reasons pull_request: jobs: guidelines_enforcer: + if: github.event.repository.private == false name: Call Ledger guidelines_enforcer uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_guidelines_enforcer.yml@v1 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..166b5f30 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,43 @@ +name: Lint and format 💅 + +on: + workflow_dispatch: + # push: + # pull_request: + # branches: + # - main + # - develop + +jobs: + lint: + runs-on: ubuntu-latest + container: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder-legacy:latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Add missing deps + run: | + DEBIAN_FRONTEND=noninteractive + apt-get update + apt-get install -y bear sudo + - name: Generate compilation database + run: bear -- make -j BOLOS_SDK="$NANOSP_SDK" + - name: Lint and format 💅 + uses: cpp-linter/cpp-linter-action@v2 + id: linter + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + file-annotations: true + files-changed-only: false + ignore: "app/build|cmake|deps|fuzz|tests" + step-summary: true + style: file # uses .clang-format + thread-comments: true + tidy-checks: "" # use only .clang-tidy checks + - name: Fail if errors + if: steps.linter.outputs.checks-failed > 0 + run: | + echo "Linter or formatter failed!" + exit 1 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 80ea1394..9cac4fc5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,6 +6,8 @@ on: branches: - main - develop + - master # for safety reasons + - dev # for safety reasons jobs: configure: @@ -16,20 +18,46 @@ jobs: - id: get-user run: echo "uid_gid=$(id -u):$(id -g)" >> $GITHUB_OUTPUT - rust_test: + rust_tests: runs-on: ubuntu-latest + container: + image: zondax/rust-ci:latest steps: - - name: Install rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: true - - name: Rust tests + - name: Cache/restore Cargo dependencies + uses: actions/cache@v3 + with: + path: ./app/rust/.cargo + key: ${{ runner.os }}-${{ hashFiles('./Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-${{ github.sha }} + - name: run rust tests run: make rust_test + clippy: + runs-on: ubuntu-latest + container: + image: zondax/rust-ci:latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + - name: Cache/restore Cargo dependencies + uses: actions/cache@v3 + with: + path: ./app/rust/.cargo + key: ${{ runner.os }}-${{ hashFiles('./Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-${{ github.sha }} + - name: clippy + run: | + cd ./app/rust + cargo clippy --all-targets --features "clippy" + build_ledger: needs: configure runs-on: ubuntu-latest @@ -42,19 +70,20 @@ jobs: size: ${{steps.build.outputs.size}} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: - submodules: true + submodules: recursive - name: Build Standard app id: build shell: bash -l {0} run: | - make + make PRODUCTION_BUILD=1 echo "size=$(python3 deps/ledger-zxlib/scripts/getSize.py s)" >> $GITHUB_OUTPUT size_nano_s: needs: build_ledger runs-on: ubuntu-latest + continue-on-error: true env: NANOS_LIMIT_SIZE: 136 steps: @@ -63,7 +92,6 @@ jobs: [ ${{needs.build_ledger.outputs.size}} -le $NANOS_LIMIT_SIZE ] test_zemu: - timeout-minutes: 25 runs-on: ubuntu-latest steps: - name: Test @@ -72,26 +100,31 @@ jobs: echo $HOME echo $DISPLAY - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: true - run: sudo apt-get update -y && sudo apt-get install -y libusb-1.0.0 libudev-dev + - name: Install rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable - name: Install node uses: actions/setup-node@v3 - name: Install yarn run: | npm install -g yarn - - name: Build Ledger app - run: make test_all + - name: Build and run zemu tests + run: | + make test_all - name: Upload Snapshots (only failure) if: ${{ failure() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: snapshots-tmp path: tests_zemu/snapshots-tmp/ build_package_nanos: - needs: [configure, rust_test, build_ledger, test_zemu] + needs: [configure, build_ledger, test_zemu, rust_tests] if: ${{ github.ref == 'refs/heads/main' }} runs-on: ubuntu-latest container: @@ -101,16 +134,16 @@ jobs: BOLOS_SDK: /opt/nanos-secure-sdk steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: - submodules: true + submodules: recursive - name: Install deps run: pip install ledgerblue - name: Build NanoS shell: bash -l {0} run: | - make + PRODUCTION_BUILD=0 make mv ./app/pkg/installer_s.sh ./app/pkg/installer_nanos.sh - name: Set tag id: nanos @@ -127,7 +160,7 @@ jobs: prerelease: false build_package_nanosp: - needs: [configure, rust_test, build_ledger, test_zemu] + needs: [configure, build_ledger, test_zemu, rust_tests] if: ${{ github.ref == 'refs/heads/main' }} runs-on: ubuntu-latest container: @@ -137,16 +170,16 @@ jobs: BOLOS_SDK: /opt/nanosplus-secure-sdk steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: - submodules: true + submodules: recursive - name: Install deps run: pip install ledgerblue - name: Build NanoSP shell: bash -l {0} run: | - make + PRODUCTION_BUILD=0 make mv ./app/pkg/installer_s2.sh ./app/pkg/installer_nanos_plus.sh - name: Set tag id: nanosp @@ -161,3 +194,38 @@ jobs: tag_name: ${{ steps.nanosp.outputs.tag_name }} draft: false prerelease: false + + build_package_stax: + needs: [configure, build_ledger, test_zemu, rust_tests] + if: ${{ github.ref == 'refs/heads/main' }} + runs-on: ubuntu-latest + container: + image: zondax/ledger-app-builder:latest + options: --user ${{ needs.configure.outputs.uid_gid }} + env: + BOLOS_SDK: /opt/stax-secure-sdk + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + - name: Install deps + run: pip install ledgerblue + + - name: Build Stax + shell: bash -l {0} + run: | + PRODUCTION_BUILD=0 make + - name: Set tag + id: stax + run: echo "tag_name=$(./app/pkg/installer_stax.sh version)" >> $GITHUB_OUTPUT + - name: Update Release + id: update_release_2 + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token + with: + files: ./app/pkg/installer_stax.sh + tag_name: ${{ steps.stax.outputs.tag_name }} + draft: false + prerelease: false diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 72ca67aa..9229e6d5 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -12,13 +12,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: submodules: true - name: Install node - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: - node-version: '14.17.0' registry-url: "https://registry.npmjs.org" scope: "@zondax" - name: Install yarn @@ -30,7 +29,9 @@ jobs: yarn build - name: Get latest release version number id: get_version - uses: battila7/get-version-action@v2 + run: | + GITHUB_REF=${{ github.ref }} + echo "version=${GITHUB_REF##*/}" >> $GITHUB_OUTPUT - name: Show version run: echo ${{ steps.get_version.outputs.version }} - name: Clean latest release version number diff --git a/.gitignore b/.gitignore index 5e7e18e3..2abbf6c6 100644 --- a/.gitignore +++ b/.gitignore @@ -53,40 +53,38 @@ Module.symvers Mkfile.old dkms.conf -\cmake-build-debug -\.idea/ -/tmp/ -/deps/nano2-sdk/ - -# Created by cmake -googletest-download/ -googletest-src/ -googletest-build/ -CMakeFiles/ -CMakeCache.txt -unittests -*.cmake -Testing/ -cmake-build-fuzz/ - # Others -/cmake-build-debug/ -/cmake-build-fuzz/ \.idea -/app/bin/ -/app/debug/ -/app/obj/ -/app/output/app*.* -app/hfuzz-parser/hfuzz_* -app/build/* - -\deps/* -!/deps/sha512 -!\deps/nanos-secure-sdk -\deps/nano2-sdk -!\deps/ledger-zxlib -!\deps/BLAKE +.vscode/*.log +.DS_Store +node_modules + +# Rust + +**/target +# **/Cargo.lock +**/.cargo/registry +**/.cargo/git + +# Workspace specific + +app/build +app/debug +app/bin +app/dep +app/obj + /build -!/tests_zemu/yarn-error.log -tests_zemu/yarn.lock -.vscode + +app/glyphs/glyphs.* + +hfuzz/hfuzz_workspace + +tests_zemu/snapshots-tmp +app/output/*.apdu +app/output/*.sha256 +app/pkg/* + +app/rust/.cargo/.package-cache-mutate + + diff --git a/.gitmodules b/.gitmodules index e8a366de..521d677e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,15 @@ [submodule "deps/ledger-secure-sdk"] path = deps/ledger-secure-sdk url = https://github.com/LedgerHQ/ledger-secure-sdk +[submodule "deps/stax-secure-sdk"] + path = deps/stax-secure-sdk + url = https://github.com/LedgerHQ/ledger-secure-sdk +[submodule "deps/nanox-secure-sdk"] + path = deps/nanox-secure-sdk + url = https://github.com/LedgerHQ/ledger-secure-sdk +[submodule "deps/nanosplus-secure-sdk"] + path = deps/nanosplus-secure-sdk + url = https://github.com/LedgerHQ/ledger-secure-sdk +[submodule "deps/nanos-secure-sdk"] + path = deps/nanos-secure-sdk + url = https://github.com/LedgerHQ/ledger-secure-sdk diff --git a/Makefile b/Makefile index 6ac593e0..38fb1ad2 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ #******************************************************************************* -#* (c) 2019 - 2023 Zondax AG +#* (c) 2019 - 2024 Zondax AG #* #* Licensed under the Apache License, Version 2.0 (the "License"); #* you may not use this file except in compliance with the License. @@ -14,10 +14,6 @@ #* limitations under the License. #******************************************************************************** -# We use BOLOS_SDK to determine the development environment that is being used -# BOLOS_SDK IS DEFINED We use the plain Makefile for Ledger -# BOLOS_SDK NOT DEFINED We use a containerized build approach - TESTS_JS_PACKAGE = "@zondax/ledger-stacks" TESTS_JS_DIR = $(CURDIR)/js @@ -25,7 +21,10 @@ ifeq ($(BOLOS_SDK),) # In this case, there is not predefined SDK and we run dockerized # When not using the SDK, we override and build the XL complete app -SUBSTRATE_PARSER_FULL ?= 1 +ZXLIB_COMPILE_STAX ?= 1 +# by default builds are not production ready +PRODUCTION_BUILD ?= 1 + include $(CURDIR)/deps/ledger-zxlib/dockerized_build.mk else @@ -33,10 +32,15 @@ default: $(MAKE) -C app %: $(info "Calling app Makefile for target $@") - COIN=$(COIN) $(MAKE) -C app $@ + COIN=$(COIN) PRODUCTION_BUILD=$(PRODUCTION_BUILD) $(MAKE) -C app $@ endif test_all: + make clean + make PRODUCTION_BUILD=1 make zemu_install - make make zemu_test + +prod: + make PRODUCTION_BUILD=1 + diff --git a/app/Makefile b/app/Makefile index 412461e3..2fa2dadb 100755 --- a/app/Makefile +++ b/app/Makefile @@ -1,7 +1,7 @@ -#****************************************************************************** -# Ledger App -# (c) 2018-2021 Zondax GmbH -# (c) 2017 Ledger +#******************************************************************************* +# Ledger App +# (c) 2018 - 2024 Zondax AG +# (c) 2017 Ledger # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -20,62 +20,53 @@ ifeq ($(BOLOS_SDK),) $(error BOLOS_SDK is not set) endif -MY_DIR := $(dir $(lastword $(MAKEFILE_LIST))) +DEBUG := 0 +MY_DIR := $(dir $(lastword $(MAKEFILE_LIST))) -all: bin/app.elf - @echo "#!/usr/bin/env bash" > $(OUTPUT_INSTALLER) - @echo "APPNAME=\"${APPNAME}\"" >> $(OUTPUT_INSTALLER) - @echo "APPVERSION=\"${APPVERSION}\"" >> $(OUTPUT_INSTALLER) - @echo "APPPATH=\""${APPPATH}"\"" >> $(OUTPUT_INSTALLER) - @echo "LOAD_PARAMS=($$(echo "${APP_LOAD_PARAMS_INSTALLER}" | sed -e "s|"${APPNAME}"|\""${APPNAME}"\"|" | sed "s/\\\'//g"))" >> $(OUTPUT_INSTALLER) - @echo "DELETE_PARAMS=($$(echo "${COMMON_DELETE_PARAMS}" | sed -e "s|"${APPNAME}"|\""${APPNAME}"\"|" ))" >> $(OUTPUT_INSTALLER) - @echo "APPHEX=\"" >> $(OUTPUT_INSTALLER) - @cat $(CURDIR)/bin/app.hex >> $(OUTPUT_INSTALLER) - @echo "\"" >> $(OUTPUT_INSTALLER) - @cat $(CURDIR)/../deps/ledger-zxlib/scripts/template.sh >> $(OUTPUT_INSTALLER) - @chmod +x $(OUTPUT_INSTALLER) - @cp $(CURDIR)/bin/* $(CURDIR)/output - @cp $(CURDIR)/output/app.elf ${OUTPUT_ELF} - @rm $(CURDIR)/output/app.elf +include $(CURDIR)/Makefile.conf +include $(CURDIR)/../deps/ledger-zxlib/makefiles/Makefile.installer_script include $(BOLOS_SDK)/Makefile.defines -$(info ************ TARGET_NAME = [$(TARGET_NAME)]) +## Display whether this is a production build or for internal use -ifeq ($(APP_TESTING),1) -DEFINES += APP_TESTING -DEFINES += ZEMU_LOGGING +ifeq ($(PRODUCTION_BUILD), 1) + $(info ************ PRODUCTION_BUILD = [PRODUCTION BUILD]) +else + $(info ************ PRODUCTION_BUILD = [INTERNAL USE]) endif +DEFINES += PRODUCTION_BUILD=$(PRODUCTION_BUILD) + +include $(CURDIR)/../deps/ledger-zxlib/makefiles/Makefile.app_testing + ifndef COIN -COIN=STX +COIN = STX endif include $(CURDIR)/Makefile.version $(info COIN = [$(COIN)]) -ifeq ($(COIN),STX) +ifeq ($(COIN), STX) # Main app configuration DEFINES += APP_STANDARD APPNAME = "Stacks" -APPPATH = "44'/5757'" --path "5757'" --path "888'/0'" -APPPATH_INSTALLER = "44'/5757'" --path 5757\' --path "888'/0'" - -else ifeq ($(COIN),STX_variant1) +APPPATH = "44'/5757'" --path "5757'" --path "888'/0'" --path "44'/1'" +PATH_APP_LOAD_PARAMS = "44'/5757'" "5757'" "888'/0'" "44'/1'" else define error_message + COIN value not supported: [$(COIN)] + endef $(error "$(error_message)") endif -APP_LOAD_PARAMS = --curve secp256k1 $(COMMON_LOAD_PARAMS) --path ${APPPATH} --path "44'/1'" -APP_LOAD_PARAMS_INSTALLER = --curve secp256k1 $(COMMON_LOAD_PARAMS) --path ${APPPATH_INSTALLER} --path "44'/1'" +APP_LOAD_PARAMS = --curve secp256k1 $(COMMON_LOAD_PARAMS) include $(CURDIR)/../deps/ledger-zxlib/makefiles/Makefile.devices -RUST_TARGET := thumbv6m-none-eabi $(info TARGET_NAME = [$(TARGET_NAME)]) $(info ICONNAME = [$(ICONNAME)]) @@ -84,18 +75,50 @@ ifndef ICONNAME $(error ICONNAME is not set) endif +# Add SDK BLAKE2b +DEFINES += HAVE_HASH HAVE_BLAKE2 +INCLUDES_PATH += $(BOLOS_SDK)/lib_cxng/src + +# Configure minimun stack size +ifeq ($(TARGET_NAME),TARGET_NANOS) + APP_STACK_MIN_SIZE := 1752 +else + APP_STACK_MIN_SIZE := 2000 +endif + include $(CURDIR)/../deps/ledger-zxlib/makefiles/Makefile.platform +INCLUDES_PATH += $(CURDIR)/src/common/ + +CC := $(CLANGPATH)clang + +ifeq ($(DEBUG), 1) +CFLAGS += -O3 -Os -Wno-unknown-pragmas -Wno-unused-parameter -g +else +CFLAGS += -O3 -Os -Wno-unknown-pragmas -Wno-unused-parameter +endif + +CFLAGS += -DAPPVERSION_M=$(APPVERSION_M) -DAPPVERSION_N=$(APPVERSION_N) -DAPPVERSION_P=$(APPVERSION_P) + +AS := $(GCCPATH)arm-none-eabi-gcc +AFLAGS += + +RUST_TARGET := thumbv6m-none-eabi + +LD := $(GCCPATH)arm-none-eabi-gcc +LDFLAGS += -z muldefs +LDLIBS += -lm -lgcc -lc +LDLIBS += -L$(MY_DIR)rust/target/$(RUST_TARGET)/release -lrslib -LDFLAGS += -z muldefs -LDLIBS += -Lrust/target/thumbv6m-none-eabi/release -lrslib APP_SOURCE_PATH += $(MY_DIR)/rust/include APP_SOURCE_PATH += $(MY_DIR)/../deps/sha512 -APP_CUSTOM_LINK_DEPENDENCIES = rust +APP_SOURCE_PATH += $(CURDIR)/rust/include +APP_CUSTOM_LINK_DEPENDENCIES := rust .PHONY: rust rust: - cd rust && RUSTC_BOOTSTRAP=1 CARGO_HOME="$(CURDIR)/rust/.cargo" cargo build --target $(RUST_TARGET) --release + cd rust && RUSTC_BOOTSTRAP=1 CARGO_HOME="$(CURDIR)/rust/.cargo" TARGET_NAME=$(TARGET_NAME) \ + cargo build --release --target $(RUST_TARGET) .PHONY: rust_clean rust_clean: @@ -103,30 +126,17 @@ rust_clean: clean: rust_clean -# load, delete and listvariants are provided to comply with Ledger requirements -.PHONY: load -load: - python -m ledgerblue.loadApp $(APP_LOAD_PARAMS) +include $(CURDIR)/../deps/ledger-zxlib/makefiles/Makefile.side_loading -.PHONY: delete -delete: - python -m ledgerblue.deleteApp $(COMMON_DELETE_PARAMS) - -# Import generic rules from the SDK include $(BOLOS_SDK)/Makefile.rules -#add dependency on custom makefile filename + dep/%.d: %.c Makefile -.PHONY: listvariants listvariants: @echo VARIANTS COIN STX .PHONY: version version: - @echo "v$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)" > app.version - -.PHONY: rust_tests -rust_tests: - cd rust && CARGO_HOME="$(CURDIR)/rust/.cargo" cargo test + @echo "v$(APPVERSION)" > app.version diff --git a/app/Makefile.conf b/app/Makefile.conf new file mode 100644 index 00000000..ebba34a3 --- /dev/null +++ b/app/Makefile.conf @@ -0,0 +1,2 @@ + +PRODUCTION_BUILD ?= 0 diff --git a/app/Makefile.version b/app/Makefile.version index a07b78d5..e7a84940 100644 --- a/app/Makefile.version +++ b/app/Makefile.version @@ -1,3 +1,3 @@ APPVERSION_M=0 APPVERSION_N=24 -APPVERSION_P=0 +APPVERSION_P=1 diff --git a/app/rust/.cargo/config b/app/rust/.cargo/config.toml similarity index 100% rename from app/rust/.cargo/config rename to app/rust/.cargo/config.toml diff --git a/app/rust/Cargo.lock b/app/rust/Cargo.lock index 7fa5af10..65f630f0 100644 --- a/app/rust/Cargo.lock +++ b/app/rust/Cargo.lock @@ -216,6 +216,12 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "nb" version = "0.1.3" @@ -239,12 +245,12 @@ checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" [[package]] name = "nom" -version = "5.1.2" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", - "version_check", + "minimal-lexical", ] [[package]] diff --git a/app/rust/Cargo.toml b/app/rust/Cargo.toml index 57a1b8b1..9fac6bef 100644 --- a/app/rust/Cargo.toml +++ b/app/rust/Cargo.toml @@ -11,17 +11,20 @@ resolver = "2" name = "rslib" crate-type = ["staticlib"] +[features] +clippy = [] + [dependencies] no-std-compat = { version = "0.4.1" } numtoa = "0.2.4" arrayref = "0.3.6" -base64 = {version = "0.13.0", default-features = false } +base64 = { version = "0.13.0", default-features = false } hex = { version = "0.4", default-features = false } serde-json-core = { version = "0.4.0", default-features = false } serde = { version = "1.0", default-features = false, features = ["derive"] } [dependencies.nom] -version = "5.1.2" +version = "7.1.2" default-features = false [dependencies.arrayvec] @@ -34,18 +37,18 @@ serde_json = "1.0.56" hex = { version = "0.4" } serde-json-core = { version = "0.4.0", features = ["std"] } serde = { version = "1.0", default-features = false, features = ["derive"] } -sha2 = {version = "0.9.1"} -base64 = {version = "0.13.0"} +sha2 = { version = "0.9.1" } +base64 = { version = "0.13.0" } [target.'cfg(fuzzing)'.dependencies] -sha2 = {version = "0.9.1"} +sha2 = { version = "0.9.1" } no-std-compat = { version = "0.4.1", features = ["std"] } [profile.release] -lto=false +lto = false codegen-units = 1 -debug=false +debug = false opt-level = "z" [profile.dev] diff --git a/app/rust/src/lib.rs b/app/rust/src/lib.rs index a38246af..66d3c9a3 100644 --- a/app/rust/src/lib.rs +++ b/app/rust/src/lib.rs @@ -12,10 +12,10 @@ mod zxformat; fn debug(_msg: &str) {} -#[cfg(not(any(test, fuzzing)))] +#[cfg(not(any(test, fuzzing, feature = "clippy")))] use core::panic::PanicInfo; -#[cfg(not(any(test, fuzzing)))] +#[cfg(not(any(test, fuzzing, feature = "clippy")))] #[panic_handler] fn panic(_info: &PanicInfo) -> ! { loop {} @@ -47,7 +47,7 @@ pub fn is_expert_mode() -> bool { #[macro_export] macro_rules! check_canary { () => { - use crate::canary; + use $crate::canary; canary(); }; } diff --git a/app/rust/src/parser/c32.rs b/app/rust/src/parser/c32.rs index 1a4892fe..198fa865 100644 --- a/app/rust/src/parser/c32.rs +++ b/app/rust/src/parser/c32.rs @@ -89,7 +89,7 @@ fn c32_encode( let c32_value = (low_bits << carry_bits) + carry; result .try_push(C32_CHARACTERS[c32_value as usize]) - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; carry_bits = (8 + carry_bits) - 5; carry = current_value >> (8 - carry_bits); @@ -97,7 +97,7 @@ fn c32_encode( let c32_value = carry & ((1 << 5) - 1); result .try_push(C32_CHARACTERS[c32_value as usize]) - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; carry_bits -= 5; carry >>= 5; } @@ -106,7 +106,7 @@ fn c32_encode( if carry_bits > 0 { result .try_push(C32_CHARACTERS[carry as usize]) - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; } // remove leading zeros from c32 encoding @@ -114,7 +114,7 @@ fn c32_encode( if v != C32_CHARACTERS[0] { result .try_push(v) - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; break; } } @@ -124,7 +124,7 @@ fn c32_encode( if *current_value == 0 { result .try_push(C32_CHARACTERS[0]) - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; } else { break; } @@ -140,7 +140,7 @@ fn c32_check_encode( c32_string: &mut ArrayVec<[u8; C32_ENCODED_ADDRS_LENGTH]>, ) -> Result<(), ParserError> { if version >= 32 { - return Err(ParserError::parser_invalid_address_version); + return Err(ParserError::InvalidAddressVersion); } // check_data will contain our initial version + signature hash diff --git a/app/rust/src/parser/error.rs b/app/rust/src/parser/error.rs index ae533ff7..e5af5a2d 100644 --- a/app/rust/src/parser/error.rs +++ b/app/rust/src/parser/error.rs @@ -1,7 +1,8 @@ #![allow(non_camel_case_types, non_upper_case_globals, non_snake_case)] #![allow(clippy::upper_case_acronyms)] -use nom::error::{ErrorKind, ParseError as NomError}; +use arrayvec::CapacityError; +use nom::error::ErrorKind; #[repr(u32)] #[derive(Copy, Clone, Debug, PartialEq)] @@ -11,69 +12,69 @@ use nom::error::{ErrorKind, ParseError as NomError}; /// purposes pub enum ParserError { // Generic errors - parser_ok, - parser_no_data, - parser_init_context_empty, - parser_display_idx_out_of_range, - parser_display_page_out_of_range, - parser_unexpected_error, - parser_no_memory_for_state, + ParserOk = 0, + NoData = 1, + InitContextEmpty = 2, + DisplayIdxOutOfRange = 3, + DisplayPageOutOfRange = 4, + UnexpectedError = 5, + NoMemoryForState = 6, // Context related errors - parser_context_mismatch, - parser_context_unexpected_size, - parser_context_invalid_chars, - parser_context_unknown_prefix, + ContextMismatch = 7, + ContextUnexpectedSize = 8, + ContextInvalidChars = 9, + ContextUnknownPrefix = 10, // Required fields - parser_required_nonce, - parser_required_method, + RequiredNonce = 11, + RequiredMethod = 12, //////////////////////// // Coin specific - parser_post_condition_failed, - parser_invalid_contract_name, - parser_invalid_asset_name, - parser_invalid_clarity_name, - parser_invalid_fungible_code, - parser_invalid_non_fungible_code, - parser_invalid_asset_info, - parser_invalid_post_condition, - parser_invalid_post_condition_principal, - parser_invalid_hash_mode, - parser_invalid_signature, - parser_invalid_pubkey_encoding, - parser_invalid_auth_type, - parser_invalid_argument_id, - parser_invalid_transaction_payload, - parser_invalid_address_version, - parser_stacks_string_too_long, - parser_unexpected_type, - parser_unexpected_buffer_end, - parser_unexpected_value, - parser_unexpected_number_items, - parser_unexpected_characters, - parser_unexpected_field, - parser_value_out_of_range, - parser_invalid_address, - parser_invalid_token_transfer_type, - parser_invalid_bytestr_message, - parser_invalid_jwt, - parser_invalid_structured_msg, - parser_crypto_error, - parser_invalid_token_transfer_principal, - parser_recursion_limit, + PostConditionFailed = 13, + InvalidContractName = 14, + InvalidAssetName = 15, + InvalidClarityName = 16, + InvalidFungibleCode = 17, + InvalidNonFungibleCode = 18, + InvalidAssetInfo = 19, + InvalidPostCondition = 20, + InvalidPostConditionPrincipal = 21, + InvalidHashMode = 22, + InvalidSignature = 23, + InvalidPubkeyEncoding = 24, + InvalidAuthType = 25, + InvalidArgumentId = 26, + InvalidTransactionPayload = 27, + InvalidAddressVersion = 28, + StacksStringTooLong = 29, + UnexpectedType = 30, + UnexpectedBufferEnd = 31, + UnexpectedValue = 32, + UnexpectedNumberItems = 33, + UnexpectedCharacters = 34, + UnexpectedField = 35, + ValueOutOfRange = 36, + InvalidAddress = 37, + InvalidTokenTransferType = 38, + InvalidBytestrMessage = 39, + InvalidJwt = 40, + InvalidStructuredMsg = 41, + CryptoError = 42, + InvalidTokenTransferPrincipal = 43, + RecursionLimit = 44, } - impl From for ParserError { fn from(err: ErrorKind) -> Self { match err { - ErrorKind::Eof => ParserError::parser_unexpected_buffer_end, - ErrorKind::Permutation => ParserError::parser_unexpected_type, - ErrorKind::TooLarge => ParserError::parser_value_out_of_range, - _ => ParserError::parser_unexpected_error, + ErrorKind::Eof => ParserError::UnexpectedBufferEnd, + ErrorKind::Permutation => ParserError::UnexpectedType, + ErrorKind::TooLarge => ParserError::ValueOutOfRange, + ErrorKind::Tag => ParserError::UnexpectedType, + _ => ParserError::UnexpectedError, } } } -impl NomError for ParserError { +impl nom::error::ParseError for ParserError { fn from_error_kind(_input: I, kind: ErrorKind) -> Self { Self::from(kind) } @@ -91,12 +92,18 @@ impl From for nom::Err { } } +impl From for ParserError { + fn from(_error: CapacityError) -> Self { + ParserError::UnexpectedBufferEnd + } +} + impl From> for ParserError { fn from(e: nom::Err) -> Self { match e { nom::Err::Error(e) => e, nom::Err::Failure(e) => e, - nom::Err::Incomplete(_) => Self::parser_unexpected_buffer_end, + nom::Err::Incomplete(_) => Self::UnexpectedBufferEnd, } } } diff --git a/app/rust/src/parser/ffi.rs b/app/rust/src/parser/ffi.rs index cf4926b7..d5cc62ca 100644 --- a/app/rust/src/parser/ffi.rs +++ b/app/rust/src/parser/ffi.rs @@ -37,7 +37,7 @@ pub unsafe extern "C" fn _parser_init( // Lets the caller know how much memory we need for allocating // our global state if alloc_size.is_null() { - return ParserError::parser_no_memory_for_state as u32; + return ParserError::NoMemoryForState as u32; } *alloc_size = core::mem::size_of::() as u16; parser_init_context(ctx, buffer, bufferSize) as u32 @@ -58,12 +58,12 @@ unsafe fn parser_init_context( if bufferSize == 0 || buffer.is_null() { (*ctx).buffer = core::ptr::null_mut(); (*ctx).bufferLen = 0; - return ParserError::parser_init_context_empty; + return ParserError::InitContextEmpty; } (*ctx).buffer = buffer; (*ctx).bufferLen = bufferSize; - ParserError::parser_ok + ParserError::ParserOk } #[no_mangle] @@ -75,11 +75,11 @@ pub unsafe extern "C" fn _read( if let Some(obj) = parsed_obj_from_state(parser_state) { match obj.read(data) { - Ok(_) => ParserError::parser_ok as u32, + Ok(_) => ParserError::ParserOk as u32, Err(e) => e as u32, } } else { - ParserError::parser_no_memory_for_state as u32 + ParserError::NoMemoryForState as u32 } } @@ -90,18 +90,18 @@ pub unsafe extern "C" fn _getNumItems( num_items: *mut u8, ) -> u32 { if tx_t.is_null() || (*tx_t).state.is_null() || num_items.is_null() { - return ParserError::parser_no_data as u32; + return ParserError::NoData as u32; } if let Some(obj) = parsed_obj_from_state(tx_t as _) { match obj.num_items() { Ok(n) => { *num_items = n; - ParserError::parser_ok as u32 + ParserError::ParserOk as u32 } Err(e) => e as u32, } } else { - ParserError::parser_no_data as u32 + ParserError::NoData as u32 } } @@ -122,18 +122,18 @@ pub unsafe extern "C" fn _getItem( let key = core::slice::from_raw_parts_mut(outKey as *mut u8, outKeyLen as usize); let value = core::slice::from_raw_parts_mut(outValue as *mut u8, outValueLen as usize); if tx_t.is_null() || (*tx_t).state.is_null() { - return ParserError::parser_context_mismatch as _; + return ParserError::ContextMismatch as _; } if let Some(obj) = parsed_obj_from_state(tx_t as _) { match obj.get_item(displayIdx, key, value, pageIdx) { Ok(page) => { *page_count = page; - ParserError::parser_ok as _ + ParserError::ParserOk as _ } Err(e) => e as _, } } else { - ParserError::parser_context_mismatch as _ + ParserError::ContextMismatch as _ } } @@ -141,9 +141,9 @@ pub unsafe extern "C" fn _getItem( pub unsafe extern "C" fn _auth_flag(tx_t: *const parse_tx_t, auth_flag: *mut u8) -> u32 { if let Some(tx) = parsed_obj_from_state(tx_t as _).and_then(|obj| obj.transaction()) { *auth_flag = tx.auth_flag() as u8; - ParserError::parser_ok as _ + ParserError::ParserOk as _ } else { - ParserError::parser_context_mismatch as _ + ParserError::ContextMismatch as _ } } @@ -193,12 +193,12 @@ pub unsafe extern "C" fn _check_pubkey_hash( ) -> u32 { if let Some(tx) = parsed_obj_from_state(tx_t as _).and_then(|obj| obj.transaction()) { if pubKey.is_null() { - return ParserError::parser_no_data as _; + return ParserError::NoData as _; } let pk = core::slice::from_raw_parts(pubKey, pubKeyLen as _); tx.check_signer_pk_hash(pk) as _ } else { - ParserError::parser_context_mismatch as _ + ParserError::ContextMismatch as _ } } @@ -246,12 +246,12 @@ pub unsafe extern "C" fn _hash_mode(tx_t: *const parse_tx_t, hash_mode: *mut u8) match tx.hash_mode() { Ok(hm) => { *hash_mode = hm as u8; - ParserError::parser_ok as _ + ParserError::ParserOk as _ } Err(e) => e as _, } } else { - ParserError::parser_context_mismatch as _ + ParserError::ContextMismatch as _ } } @@ -273,19 +273,19 @@ pub unsafe extern "C" fn _get_multisig_field( let auth_field = parsed_obj_from_state(tx_t as _) .and_then(|obj| obj.transaction()) .and_then(|tx| tx.transaction_auth.get_auth_field(index)) - .unwrap_or(Err(ParserError::parser_context_mismatch)); + .unwrap_or(Err(ParserError::ContextMismatch)); match auth_field { Ok(af) => match af { TransactionAuthField::PublicKey(i, pubkey) => { *id = i as u8; *data = pubkey.as_ptr(); - ParserError::parser_ok as _ + ParserError::ParserOk as _ } TransactionAuthField::Signature(i, sig) => { *id = i as u8; *data = sig.as_ptr(); - ParserError::parser_ok as _ + ParserError::ParserOk as _ } }, Err(e) => { @@ -327,8 +327,8 @@ pub unsafe extern "C" fn _structured_msg_hash( if let Some(tx) = parsed_obj_from_state(tx_t as _).and_then(|obj| obj.structured_msg()) { let output = core::slice::from_raw_parts_mut(out, out_len as _); if tx.get_hash(output).is_ok() { - return ParserError::parser_ok as _; + return ParserError::ParserOk as _; } } - ParserError::parser_unexpected_error as _ + ParserError::UnexpectedError as _ } diff --git a/app/rust/src/parser/jwt.rs b/app/rust/src/parser/jwt.rs index 7ede479b..444b6d74 100644 --- a/app/rust/src/parser/jwt.rs +++ b/app/rust/src/parser/jwt.rs @@ -13,12 +13,12 @@ fn decode_data(input: &[u8], output: &mut [u8]) -> Result { let estimate_len = estimate_len * 3; if output.len() < estimate_len { - return Err(ParserError::parser_unexpected_buffer_end); + return Err(ParserError::UnexpectedBufferEnd); } // TODO: Add new error for this decoding error base64::decode_config_slice(input, base64::URL_SAFE, output) - .map_err(|_| ParserError::parser_unexpected_type) + .map_err(|_| ParserError::UnexpectedType) } #[repr(C)] @@ -51,7 +51,7 @@ impl<'a> Header<'a> { impl<'a> JwtHeader<'a> { pub fn from_bytes(data: &'a [u8]) -> Result { if !data.is_ascii() { - return Err(ParserError::parser_unexpected_type); + return Err(ParserError::UnexpectedType); } let mut header_bytes = [0u8; MAX_BASE64_HEADER_LEN]; @@ -59,10 +59,10 @@ impl<'a> JwtHeader<'a> { let len = decode_data(data, header_bytes.as_mut())?; let header: Header = serde_json_core::from_slice(&header_bytes[..len]) .map(|(h, _)| h) - .map_err(|_| ParserError::parser_invalid_jwt)?; + .map_err(|_| ParserError::InvalidJwt)?; if !header.is_valid() { - return Err(ParserError::parser_invalid_jwt); + return Err(ParserError::InvalidJwt); } Ok(Self(data)) } @@ -83,18 +83,18 @@ impl<'a> Jwt<'a> { fn parse_header_payload(data: &'a [u8]) -> Result<(JwtHeader<'a>, &'a [u8]), ParserError> { // Only ascii values are valid for json web token if !data.is_ascii() { - return Err(ParserError::parser_invalid_jwt); + return Err(ParserError::InvalidJwt); } let mut jwt_parts = data.split(|byte| *byte == b'.'); - let header_data = jwt_parts.next().ok_or(ParserError::parser_invalid_jwt)?; + let header_data = jwt_parts.next().ok_or(ParserError::InvalidJwt)?; let header = JwtHeader::from_bytes(header_data)?; - let payload = jwt_parts.next().ok_or(ParserError::parser_invalid_jwt)?; + let payload = jwt_parts.next().ok_or(ParserError::InvalidJwt)?; if jwt_parts.next().is_some() { - return Err(ParserError::parser_invalid_jwt); + return Err(ParserError::InvalidJwt); } Ok((header, payload)) @@ -122,21 +122,21 @@ impl<'a> Jwt<'a> { page_idx: u8, ) -> Result { if display_idx > 0 { - return Err(ParserError::parser_display_idx_out_of_range); + return Err(ParserError::DisplayIdxOutOfRange); } let mut writer_key = Writer::new(out_key); writer_key .write_str("JWT hash:") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let mut out_data = [0u8; SHA256_LEN]; self.get_hash(&mut out_data); // hex encode the hash let mut hash_str = [0u8; SHA256_LEN * 2]; encode_to_slice(out_data.as_ref(), hash_str.as_mut()) - .map_err(|_| ParserError::parser_unexpected_error)?; + .map_err(|_| ParserError::UnexpectedError)?; pageString(out_value, hash_str.as_ref(), page_idx) } } @@ -172,9 +172,10 @@ mod test { impl Header { fn with_other(other: Option) -> Self { - let mut h = Header::default(); - h.other = other; - h + Self { + other, + ..Default::default() + } } } diff --git a/app/rust/src/parser/message.rs b/app/rust/src/parser/message.rs index bac1a07e..4790a89a 100644 --- a/app/rust/src/parser/message.rs +++ b/app/rust/src/parser/message.rs @@ -16,7 +16,7 @@ pub struct Message<'a>(ByteString<'a>); impl<'a> Message<'a> { pub fn from_bytes(data: &'a [u8]) -> Result { - ByteString::from_bytes(data).map(|msg| Self(msg)) + ByteString::from_bytes(data).map(Self) } pub fn read(&mut self, data: &'a [u8]) -> Result<(), ParserError> { @@ -62,17 +62,16 @@ impl<'a> ByteString<'a> { // returns the message content fn get_msg(data: &'a [u8]) -> Result<&'a [u8], ParserError> { if data.is_empty() { - return Err(ParserError::parser_unexpected_buffer_end); + return Err(ParserError::UnexpectedBufferEnd); } - let (rem, len) = - read_varint(data).map_err(|_| ParserError::parser_invalid_bytestr_message)?; + let (rem, len) = read_varint(data).map_err(|_| ParserError::InvalidBytestrMessage)?; let (_, message_content) = take::<_, _, ParserError>(len as usize)(rem) - .map_err(|_| ParserError::parser_invalid_bytestr_message)?; + .map_err(|_| ParserError::InvalidBytestrMessage)?; if !message_content.is_ascii() { - return Err(ParserError::parser_invalid_bytestr_message); + return Err(ParserError::InvalidBytestrMessage); } Ok(message_content) @@ -80,7 +79,7 @@ impl<'a> ByteString<'a> { pub fn from_bytes(data: &'a [u8]) -> Result { if !Self::contain_header(data) { - return Err(ParserError::parser_invalid_bytestr_message); + return Err(ParserError::InvalidBytestrMessage); } let message = Self::get_msg(&data[BYTE_STRING_HEADER_LEN..])?; Ok(Self(message)) @@ -99,7 +98,7 @@ impl<'a> ByteString<'a> { page_idx: u8, ) -> Result { if display_idx != 0 { - return Err(ParserError::parser_display_idx_out_of_range); + return Err(ParserError::DisplayIdxOutOfRange); } let mut writer_key = Writer::new(out_key); @@ -120,7 +119,7 @@ impl<'a> ByteString<'a> { let mut copy_len = if self.0.len() > MAX_ASCII_LEN { let m = msg .get_mut(MAX_ASCII_LEN..MAX_ASCII_LEN + suffix.len()) - .ok_or(ParserError::parser_unexpected_buffer_end)?; + .ok_or(ParserError::UnexpectedBufferEnd)?; m.copy_from_slice(&suffix[..]); MAX_ASCII_LEN } else { @@ -138,7 +137,7 @@ impl<'a> ByteString<'a> { writer_key .write_str("Sign Message") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; pageString(out_value, &msg[..copy_len], page_idx) } diff --git a/app/rust/src/parser/parsed_obj.rs b/app/rust/src/parser/parsed_obj.rs index 1750f41c..2fa43f7f 100644 --- a/app/rust/src/parser/parsed_obj.rs +++ b/app/rust/src/parser/parsed_obj.rs @@ -36,7 +36,7 @@ pub struct ParsedObj<'a> { impl<'a> ParsedObj<'a> { pub fn from_bytes(data: &'a [u8]) -> Result { if data.is_empty() { - return Err(ParserError::parser_no_data); + return Err(ParserError::NoData); } // we expect a transaction let tag; @@ -57,7 +57,7 @@ impl<'a> ParsedObj<'a> { pub fn read(&mut self, data: &'a [u8]) -> Result<(), ParserError> { if data.is_empty() { - return Err(ParserError::parser_no_data); + return Err(ParserError::NoData); } // we expect a transaction @@ -87,7 +87,7 @@ impl<'a> ParsedObj<'a> { Tag::Message => Ok(self.obj.message().num_items()), Tag::StructuredMsg => Ok(self.obj.structured_msg().num_items()), Tag::Jwt => Ok(self.obj.jwt().num_items()), - _ => Err(ParserError::parser_unexpected_error), + _ => Err(ParserError::UnexpectedError), } } } @@ -116,7 +116,7 @@ impl<'a> ParsedObj<'a> { .get_item(display_idx, key, value, page_idx) } Tag::Jwt => self.obj.jwt().get_item(display_idx, key, value, page_idx), - _ => Err(ParserError::parser_unexpected_error), + _ => Err(ParserError::UnexpectedError), } } } @@ -222,40 +222,40 @@ impl<'a> Obj<'a> { Tag::Jwt => Ok(Self { jwt: ManuallyDrop::new(Jwt::from_bytes(data)?), }), - _ => Err(ParserError::parser_unexpected_type), + _ => Err(ParserError::UnexpectedType), } } pub unsafe fn read_tx(&mut self, data: &'a [u8]) -> Result<(), ParserError> { - (&mut *self.tx).read(data) + (*self.tx).read(data) } pub unsafe fn read_msg(&mut self, data: &'a [u8]) -> Result<(), ParserError> { - (&mut *self.msg).read(data) + (*self.msg).read(data) } pub unsafe fn read_structured_msg(&mut self, data: &'a [u8]) -> Result<(), ParserError> { - (&mut *self.structured_msg).read(data) + (*self.structured_msg).read(data) } pub unsafe fn read_jwt(&mut self, data: &'a [u8]) -> Result<(), ParserError> { - (&mut *self.jwt).read(data) + (*self.jwt).read(data) } #[inline(always)] pub unsafe fn transaction(&mut self) -> &mut Transaction<'a> { - &mut *self.tx + &mut self.tx } pub unsafe fn message(&mut self) -> &mut Message<'a> { - &mut *self.msg + &mut self.msg } pub unsafe fn structured_msg(&mut self) -> &mut StructuredMsg<'a> { - &mut *self.structured_msg + &mut self.structured_msg } pub unsafe fn jwt(&mut self) -> &mut Jwt<'a> { - &mut *self.jwt + &mut self.jwt } } @@ -766,7 +766,7 @@ mod test { #[test] fn parse_contract_call_tx() { let bytes_str = "0000000001040061e115b4463fb27425e80fa8e3e2616b4e5a17e40000000000000011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003020000000200021661e115b4463fb27425e80fa8e3e2616b4e5a17e40500000000000f4240010316e685b016b3b6cd9ebf35f38e5ae29392e2acd51d0a616c65782d7661756c7416e685b016b3b6cd9ebf35f38e5ae29392e2acd51d176167653030302d676f7665726e616e63652d746f6b656e04616c657803000000001a6e83360216e685b016b3b6cd9ebf35f38e5ae29392e2acd51d11737761702d68656c7065722d76312d30330b737761702d68656c706572000000040616e685b016b3b6cd9ebf35f38e5ae29392e2acd51d0a746f6b656e2d777374780616e685b016b3b6cd9ebf35f38e5ae29392e2acd51d176167653030302d676f7665726e616e63652d746f6b656e0100000000000000000000000005f5e1000a010000000000000000000000001a6e8336"; - let bytes = hex::decode(&bytes_str).unwrap(); + let bytes = hex::decode(bytes_str).unwrap(); let mut transaction = ParsedObj::from_bytes(&bytes).unwrap(); transaction.read(&bytes).unwrap(); diff --git a/app/rust/src/parser/parser_common.rs b/app/rust/src/parser/parser_common.rs index 8baa16d9..05b42dbe 100644 --- a/app/rust/src/parser/parser_common.rs +++ b/app/rust/src/parser/parser_common.rs @@ -47,7 +47,7 @@ impl TryFrom for TransactionVersion { match value { 0x00 => Ok(Self::Mainnet), 0x80 => Ok(Self::Testnet), - _ => Err(ParserError::parser_unexpected_value), + _ => Err(ParserError::UnexpectedValue), } } } @@ -78,7 +78,7 @@ impl TryFrom for AssetInfoId { 0 => AssetInfoId::STX, 1 => AssetInfoId::FungibleAsset, 2 => AssetInfoId::NonfungibleAsset, - _ => return Err(ParserError::parser_unexpected_value), + _ => return Err(ParserError::UnexpectedValue), }; Ok(s) } @@ -160,7 +160,7 @@ impl TryFrom for HashMode { x if x == HashMode::P2WSH as u8 => HashMode::P2WSH, x if x == HashMode::P2SHNS as u8 => HashMode::P2SHNS, x if x == HashMode::P2WSHNS as u8 => HashMode::P2WSHNS, - _ => return Err(ParserError::parser_invalid_hash_mode), + _ => return Err(ParserError::InvalidHashMode), }; Ok(mode) } @@ -198,7 +198,7 @@ impl<'a> ContractName<'a> { // Contract names, but the docs do not say nothing about what is a valid clarity name either // ascii or utf8 values, lets check it here. if !name.0.is_ascii() { - return Err(ParserError::parser_invalid_contract_name.into()); + return Err(ParserError::InvalidContractName.into()); } Ok((rem, Self(name))) @@ -211,6 +211,10 @@ impl<'a> ContractName<'a> { pub fn len(&self) -> usize { self.name().len() } + + pub fn is_empty(&self) -> bool { + self.name().is_empty() + } } // A clarity value used in tuples @@ -234,7 +238,7 @@ impl<'a> ClarityName<'a> { let (_, len) = le_u8(bytes)?; if len >= Self::MAX_LEN { - return Err(ParserError::parser_value_out_of_range.into()); + return Err(ParserError::ValueOutOfRange.into()); } // include the 1-byte len @@ -248,6 +252,10 @@ impl<'a> ClarityName<'a> { pub fn len(&self) -> usize { self.0.len() } + + pub fn is_empty(&self) -> bool { + self.0.is_empty() + } } #[repr(C)] diff --git a/app/rust/src/parser/post_condition.rs b/app/rust/src/parser/post_condition.rs index 98c1365f..834ddf9c 100644 --- a/app/rust/src/parser/post_condition.rs +++ b/app/rust/src/parser/post_condition.rs @@ -30,7 +30,7 @@ impl TryFrom for PostConditionPrincipalId { 1 => Self::Origin, 2 => Self::Standard, 3 => Self::Contract, - _ => return Err(ParserError::parser_unexpected_value), + _ => return Err(ParserError::UnexpectedValue), }; Ok(id) } @@ -189,7 +189,7 @@ impl NonfungibleConditionCode { #[repr(u8)] #[derive(Clone, PartialEq, Copy)] pub enum PostConditionType { - STX = 0, + Stx = 0, FungibleToken = 1, NonFungibleToken = 2, } @@ -199,10 +199,10 @@ impl TryFrom for PostConditionType { fn try_from(value: u8) -> Result { let t = match value { - 0 => Self::STX, + 0 => Self::Stx, 1 => Self::FungibleToken, 2 => Self::NonFungibleToken, - _ => return Err(ParserError::parser_invalid_post_condition), + _ => return Err(ParserError::InvalidPostCondition), }; Ok(t) @@ -214,7 +214,7 @@ impl TryFrom for PostConditionType { #[derive(Clone, Copy, PartialEq)] #[cfg_attr(test, derive(Debug))] pub enum TransactionPostCondition<'a> { - STX(&'a [u8]), + Stx(&'a [u8]), Fungible(&'a [u8]), Nonfungible(&'a [u8]), } @@ -227,10 +227,10 @@ impl<'a> TransactionPostCondition<'a> { let principal_len = raw.len() - principal.0.len(); match PostConditionType::try_from(cond_type)? { - PostConditionType::STX => { + PostConditionType::Stx => { let len = principal_len + 1 + 8; let (raw, inner) = take(len)(raw)?; - Ok((raw, Self::STX(inner))) + Ok((raw, Self::Stx(inner))) } PostConditionType::FungibleToken => { let asset = AssetInfo::read_as_bytes(principal.0)?; @@ -253,7 +253,7 @@ impl<'a> TransactionPostCondition<'a> { let (raw, _) = PostConditionPrincipal::read_as_bytes(cond_type.0)?; let mut len = bytes.len() - raw.len(); len += match PostConditionType::try_from(cond_type.1)? { - PostConditionType::STX => { + PostConditionType::Stx => { // We take 9-bytes which comprises the 8-byte amount + 1-byte fungible code 9usize } @@ -274,7 +274,7 @@ impl<'a> TransactionPostCondition<'a> { pub fn is_origin_principal(&self) -> bool { match self { - Self::STX(principal) | Self::Fungible(principal) | Self::Nonfungible(principal) => { + Self::Stx(principal) | Self::Fungible(principal) | Self::Nonfungible(principal) => { principal[0] == PostConditionPrincipalId::Origin as u8 } } @@ -282,7 +282,7 @@ impl<'a> TransactionPostCondition<'a> { pub fn is_standard_principal(&self) -> bool { match self { - Self::STX(principal) | Self::Fungible(principal) | Self::Nonfungible(principal) => { + Self::Stx(principal) | Self::Fungible(principal) | Self::Nonfungible(principal) => { principal[0] == PostConditionPrincipalId::Standard as u8 } } @@ -290,7 +290,7 @@ impl<'a> TransactionPostCondition<'a> { pub fn is_contract_principal(&self) -> bool { match self { - Self::STX(principal) | Self::Fungible(principal) | Self::Nonfungible(principal) => { + Self::Stx(principal) | Self::Fungible(principal) | Self::Nonfungible(principal) => { principal[0] == PostConditionPrincipalId::Origin as u8 } } @@ -301,16 +301,16 @@ impl<'a> TransactionPostCondition<'a> { &self, ) -> Result, ParserError> { match self { - Self::STX(principal) | Self::Fungible(principal) | Self::Nonfungible(principal) => { - let (_, principal) = PostConditionPrincipal::from_bytes(&principal) - .map_err(|_| ParserError::parser_invalid_post_condition)?; + Self::Stx(principal) | Self::Fungible(principal) | Self::Nonfungible(principal) => { + let (_, principal) = PostConditionPrincipal::from_bytes(principal) + .map_err(|_| ParserError::InvalidPostCondition)?; principal.get_principal_address() } } } pub fn is_stx(&self) -> bool { - matches!(self, Self::STX(..)) + matches!(self, Self::Stx(..)) } pub fn is_fungible(&self) -> bool { @@ -323,11 +323,9 @@ impl<'a> TransactionPostCondition<'a> { pub fn tokens_amount(&self) -> Option { match *self { - Self::STX(inner) | Self::Fungible(inner) => { + Self::Stx(inner) | Self::Fungible(inner) => { let at = inner.len() - 8; - be_u64::<'a, ParserError>(&inner[at..]) - .map(|res| res.1) - .ok() + be_u64::<_, ParserError>(&inner[at..]).map(|res| res.1).ok() } _ => None, } @@ -335,11 +333,9 @@ impl<'a> TransactionPostCondition<'a> { pub fn amount_stx(&self) -> Option { match self { - Self::STX(inner) => { + Self::Stx(inner) => { let at = inner.len() - 8; - be_u64::<'a, ParserError>(&inner[at..]) - .map(|res| res.1) - .ok() + be_u64::<_, ParserError>(&inner[at..]).map(|res| res.1).ok() } _ => None, } @@ -369,7 +365,7 @@ impl<'a> TransactionPostCondition<'a> { pub fn fungible_condition_code(&self) -> Option { let code = match self { - Self::STX(inner) | Self::Fungible(inner) => inner[inner.len() - 9], // TODO: comment this 9 + Self::Stx(inner) | Self::Fungible(inner) => inner[inner.len() - 9], // TODO: comment this 9 _ => return None, }; FungibleConditionCode::from_u8(code) @@ -397,7 +393,7 @@ impl<'a> TransactionPostCondition<'a> { pub fn num_items(&self) -> u8 { match self { - Self::STX(..) | Self::Nonfungible(..) => 3, + Self::Stx(..) | Self::Nonfungible(..) => 3, Self::Fungible(..) => 4, } } @@ -412,7 +408,7 @@ impl<'a> TransactionPostCondition<'a> { let mut writer_key = zxformat::Writer::new(out_key); writer_key .write_str("Principal") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let addr = self.get_principal_address()?; let rs = zxformat::pageString(out_value, addr.as_ref(), page_idx); crate::check_canary!(); @@ -431,7 +427,7 @@ impl<'a> TransactionPostCondition<'a> { self.write_principal_address(out_key, out_value, page_idx) } else { match self { - Self::STX(..) => self.get_stx_items(index, out_key, out_value, page_idx), + Self::Stx(..) => self.get_stx_items(index, out_key, out_value, page_idx), Self::Fungible(..) => self.get_fungible_items(index, out_key, out_value, page_idx), Self::Nonfungible(..) => { self.get_non_fungible_items(index, out_key, out_value, page_idx) @@ -449,28 +445,28 @@ impl<'a> TransactionPostCondition<'a> { ) -> Result { let mut writer_key = zxformat::Writer::new(out_key); match self { - Self::STX(..) => match display_idx { + Self::Stx(..) => match display_idx { // PostCondition code 1 => { writer_key .write_str("Fungi. Code") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let code = self .fungible_condition_code() - .ok_or(ParserError::parser_invalid_fungible_code)?; + .ok_or(ParserError::InvalidFungibleCode)?; zxformat::pageString(out_value, code.to_str().as_bytes(), page_idx) } // Amount in stx 2 => { writer_key - .write_str("STX amount") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .write_str("Stx amount") + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let amount = self.amount_stx_str().unwrap(); zxformat::pageString(out_value, amount.as_ref(), page_idx) } - _ => Err(ParserError::parser_display_idx_out_of_range), + _ => Err(ParserError::DisplayIdxOutOfRange), }, - _ => Err(ParserError::parser_unexpected_error), + _ => Err(ParserError::UnexpectedError), } } @@ -489,10 +485,8 @@ impl<'a> TransactionPostCondition<'a> { 1 => { writer_key .write_str("Asset name") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; - let name = self - .asset_name() - .ok_or(ParserError::parser_invalid_asset_name)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; + let name = self.asset_name().ok_or(ParserError::InvalidAssetName)?; crate::check_canary!(); zxformat::pageString(out_value, name, page_idx) } @@ -500,10 +494,10 @@ impl<'a> TransactionPostCondition<'a> { 2 => { writer_key .write_str("Fungi. Code") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let code = self .fungible_condition_code() - .ok_or(ParserError::parser_invalid_fungible_code)?; + .ok_or(ParserError::InvalidFungibleCode)?; crate::check_canary!(); zxformat::pageString(out_value, code.to_str().as_bytes(), page_idx) } @@ -511,17 +505,17 @@ impl<'a> TransactionPostCondition<'a> { 3 => { writer_key .write_str("Token amount") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let token = self .tokens_amount_str() - .ok_or(ParserError::parser_unexpected_value)?; + .ok_or(ParserError::UnexpectedValue)?; crate::check_canary!(); zxformat::pageString(out_value, &token[..token.len()], page_idx) } - _ => Err(ParserError::parser_display_idx_out_of_range), + _ => Err(ParserError::DisplayIdxOutOfRange), } } - _ => Err(ParserError::parser_unexpected_error), + _ => Err(ParserError::UnexpectedError), } } @@ -540,33 +534,31 @@ impl<'a> TransactionPostCondition<'a> { 1 => { writer_key .write_str("Asset name") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; - let name = self - .asset_name() - .ok_or(ParserError::parser_invalid_asset_name)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; + let name = self.asset_name().ok_or(ParserError::InvalidAssetName)?; zxformat::pageString(out_value, name, page_idx) } // Fungible code 2 => { writer_key .write_str("NonFungi. Code") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let code = self .non_fungible_condition_code() - .ok_or(ParserError::parser_invalid_non_fungible_code)?; + .ok_or(ParserError::InvalidNonFungibleCode)?; zxformat::pageString(out_value, code.to_str().as_bytes(), page_idx) } - _ => Err(ParserError::parser_display_idx_out_of_range), + _ => Err(ParserError::DisplayIdxOutOfRange), } } - _ => Err(ParserError::parser_unexpected_error), + _ => Err(ParserError::UnexpectedError), } } #[cfg(test)] pub fn get_inner_bytes(&self) -> &[u8] { match self { - Self::STX(inner) | Self::Fungible(inner) | Self::Nonfungible(inner) => inner, + Self::Stx(inner) | Self::Fungible(inner) | Self::Nonfungible(inner) => inner, } } } diff --git a/app/rust/src/parser/principal.rs b/app/rust/src/parser/principal.rs index 1f42d008..c88af991 100644 --- a/app/rust/src/parser/principal.rs +++ b/app/rust/src/parser/principal.rs @@ -19,7 +19,7 @@ impl<'a> StandardPrincipal<'a> { pub fn version(&self) -> u8 { // safe to unwrap as this was checked when parsing - *self.0.get(0).apdu_unwrap() + *self.0.first().apdu_unwrap() } pub fn raw_address(&self) -> &'a [u8] { diff --git a/app/rust/src/parser/spending_condition.rs b/app/rust/src/parser/spending_condition.rs index 5f9d41ad..da62cc97 100644 --- a/app/rust/src/parser/spending_condition.rs +++ b/app/rust/src/parser/spending_condition.rs @@ -62,7 +62,7 @@ impl TryFrom for TransactionAuthFieldID { x if x == Self::PublicKeyUncompressed as u8 => Ok(Self::PublicKeyUncompressed), x if x == Self::SignatureCompressed as u8 => Ok(Self::SignatureCompressed), x if x == Self::SignatureUncompressed as u8 => Ok(Self::SignatureUncompressed), - _ => Err(ParserError::parser_value_out_of_range), + _ => Err(ParserError::ValueOutOfRange), } } } @@ -148,15 +148,15 @@ impl<'a> SpendingConditionSigner<'a> { } pub fn nonce(&self) -> Result { - be_u64::<'a, ParserError>(&self.data[21..]) + be_u64::<_, ParserError>(&self.data[21..]) .map(|res| res.1) - .map_err(|_| ParserError::parser_unexpected_value) + .map_err(|_| ParserError::UnexpectedValue) } pub fn fee(&self) -> Result { - be_u64::<'a, ParserError>(&self.data[29..]) + be_u64::<_, ParserError>(&self.data[29..]) .map(|res| res.1) - .map_err(|_| ParserError::parser_unexpected_value) + .map_err(|_| ParserError::UnexpectedValue) } #[inline(never)] @@ -246,7 +246,7 @@ impl<'a> SinglesigSpendingCondition<'a> { #[inline(never)] pub fn from_bytes(bytes: &'a [u8]) -> nom::IResult<&[u8], Self, ParserError> { // we take 65-byte signature + 1-byte signature public-key encoding type - let len = SIGNATURE_LEN as usize + 1; + let len = SIGNATURE_LEN + 1; let (raw, _) = take(len)(bytes)?; let data = arrayref::array_ref!(bytes, 0, SINGLE_SPENDING_CONDITION_LEN); check_canary!(); @@ -261,7 +261,7 @@ impl<'a> SinglesigSpendingCondition<'a> { x if x == TransactionPublicKeyEncoding::Uncompressed as u8 => { Ok(TransactionPublicKeyEncoding::Uncompressed) } - _ => Err(ParserError::parser_invalid_pubkey_encoding), + _ => Err(ParserError::InvalidPubkeyEncoding), } } @@ -353,7 +353,7 @@ impl<'a> MultisigSpendingCondition<'a> { }; if index >= num_fields { - return Err(nom::Err::Error(ParserError::parser_value_out_of_range)); + return Err(nom::Err::Error(ParserError::ValueOutOfRange)); }; // Parse and ignore preceding fields @@ -382,7 +382,7 @@ impl<'a> MultisigSpendingCondition<'a> { pub fn num_fields(&self) -> Result { Self::num_fields_from_bytes(self.auth_fields_raw) .map(|num| num.1) - .map_err(|_| ParserError::parser_unexpected_value) + .map_err(|_| ParserError::UnexpectedValue) } fn clear_signature(&mut self) { @@ -415,7 +415,7 @@ impl<'a> TransactionSpendingCondition<'a> { HashMode::P2PKH | HashMode::P2WPKH => { let (raw, sig) = SinglesigSpendingCondition::from_bytes(raw)?; if !sig.key_encoding()?.is_valid_hash_mode(hash_mode) { - return Err(nom::Err::Error(ParserError::parser_invalid_pubkey_encoding)); + return Err(nom::Err::Error(ParserError::InvalidPubkeyEncoding)); } (raw, SpendingConditionSignature::Singlesig(sig)) } @@ -514,13 +514,11 @@ impl<'a> TransactionSpendingCondition<'a> { buf.iter_mut().take(20).for_each(|v| *v = 0); // append the signatures count at the end 2-bytes - let count = self - .required_signatures() - .ok_or(ParserError::parser_no_data)?; + let count = self.required_signatures().ok_or(ParserError::NoData)?; buf[20..STANDARD_MULTISIG_AUTH_LEN].copy_from_slice(&count.to_be_bytes()); return Ok(STANDARD_MULTISIG_AUTH_LEN); } - Err(ParserError::parser_no_data) + Err(ParserError::NoData) } } diff --git a/app/rust/src/parser/structured_msg.rs b/app/rust/src/parser/structured_msg.rs index fc2355d2..46d10334 100644 --- a/app/rust/src/parser/structured_msg.rs +++ b/app/rust/src/parser/structured_msg.rs @@ -27,7 +27,7 @@ impl<'a> Domain<'a> { // Domain is a tuple with 3 elements let tuple = value .tuple() - .ok_or(ParserError::parser_invalid_structured_msg)?; + .ok_or(ParserError::InvalidStructuredMsg)?; let mut items = 0; for (key, value) in tuple.iter() { @@ -36,13 +36,13 @@ impl<'a> Domain<'a> { (b"name", ValueId::StringAscii) => {} (b"version", ValueId::StringAscii) => {} (b"chain-id", ValueId::UInt) => {} - _ => return Err(ParserError::parser_invalid_structured_msg.into()), + _ => return Err(ParserError::InvalidStructuredMsg.into()), } items += 1; } if items != tuple.num_elements() || items != Self::LEN { - return Err(ParserError::parser_invalid_structured_msg.into()); + return Err(ParserError::InvalidStructuredMsg.into()); } Ok((rem, Self(value))) @@ -78,7 +78,7 @@ impl<'a> Domain<'a> { let name = key.name(); let m = out_key .get_mut(0..name.len()) - .ok_or(ParserError::parser_unexpected_buffer_end)?; + .ok_or(ParserError::UnexpectedBufferEnd)?; m.copy_from_slice(name); let id = value.value_id(); @@ -95,7 +95,7 @@ impl<'a> Domain<'a> { pageString(out_value, string.content(), page_idx) } } else { - Err(ParserError::parser_unexpected_number_items) + Err(ParserError::UnexpectedNumberItems) } } } @@ -162,7 +162,7 @@ impl<'a> StructuredMsg<'a> { fn validate(data: &[u8]) -> Result<(), ParserError> { let (rem, _) = Value::from_bytes::(data)?; if !rem.is_empty() { - return Err(ParserError::parser_unexpected_value); + return Err(ParserError::UnexpectedValue); } Ok(()) } @@ -185,7 +185,7 @@ impl<'a> StructuredMsg<'a> { #[inline(never)] pub fn get_hash(&self, out: &mut [u8]) -> Result<(), ParserError> { if out.len() < SHA256_LEN { - return Err(ParserError::parser_unexpected_buffer_end); + return Err(ParserError::UnexpectedBufferEnd); } // get prefix let prefix = Self::prefix(); @@ -236,7 +236,7 @@ impl<'a> StructuredMsg<'a> { let mut writer_key = Writer::new(out_key); writer_key .write_str("Message Hash") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; // 1. get prefix hash let mut hash = [0; SHA256_LEN]; @@ -247,12 +247,12 @@ impl<'a> StructuredMsg<'a> { let mut hex = [0; SHA256_LEN * 2]; encode_to_slice(&hash[..], &mut hex[..]) - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; pageString(out_value, &hex[..], page_idx) } - _ => Err(ParserError::parser_unexpected_number_items), + _ => Err(ParserError::UnexpectedNumberItems), } } } diff --git a/app/rust/src/parser/transaction.rs b/app/rust/src/parser/transaction.rs index 7de3ea02..f95a819d 100644 --- a/app/rust/src/parser/transaction.rs +++ b/app/rust/src/parser/transaction.rs @@ -56,7 +56,7 @@ impl TransactionPostConditionMode { #[inline(never)] fn from_bytes(bytes: &[u8]) -> nom::IResult<&[u8], Self, ParserError> { let mode = le_u8(bytes)?; - let tx_mode = Self::from_u8(mode.1).ok_or(ParserError::parser_unexpected_error)?; + let tx_mode = Self::from_u8(mode.1).ok_or(ParserError::UnexpectedError)?; check_canary!(); Ok((mode.0, tx_mode)) } @@ -85,7 +85,7 @@ impl TransactionAnchorMode { #[inline(never)] fn from_bytes(bytes: &[u8]) -> nom::IResult<&[u8], Self, ParserError> { let mode = le_u8(bytes)?; - let tx_mode = Self::from_u8(mode.1).ok_or(ParserError::parser_unexpected_error)?; + let tx_mode = Self::from_u8(mode.1).ok_or(ParserError::UnexpectedError)?; check_canary!(); Ok((mode.0, tx_mode)) } @@ -103,9 +103,9 @@ pub struct PostConditions<'a> { impl<'a> PostConditions<'a> { #[inline(never)] fn from_bytes(bytes: &'a [u8]) -> nom::IResult<&[u8], Self, ParserError> { - let (raw, len) = be_u32(bytes)?; + let (raw, len) = be_u32::<_, ParserError>(bytes)?; if len > NUM_SUPPORTED_POST_CONDITIONS as u32 { - return Err(nom::Err::Error(ParserError::parser_value_out_of_range)); + return Err(nom::Err::Error(ParserError::ValueOutOfRange)); } let mut conditions: ArrayVec<[&'a [u8]; NUM_SUPPORTED_POST_CONDITIONS]> = ArrayVec::new(); let mut iter = iterator(raw, TransactionPostCondition::read_as_bytes); @@ -165,7 +165,7 @@ impl<'a> PostConditions<'a> { self.current_idx += 1; // this should not happen if self.current_idx > self.num_items { - return Err(ParserError::parser_unexpected_error); + return Err(ParserError::UnexpectedError); } } else if idx < limit && idx > 0 { self.current_idx -= 1; @@ -203,7 +203,7 @@ impl<'a> PostConditions<'a> { fn current_post_condition(&self) -> Result { TransactionPostCondition::from_bytes(self.conditions[self.current_idx as usize]) - .map_err(|_| ParserError::parser_post_condition_failed) + .map_err(|_| ParserError::PostConditionFailed) .map(|res| res.1) } } @@ -271,7 +271,7 @@ impl<'a> Transaction<'a> { let is_standard_auth = self.transaction_auth.is_standard_auth(); if is_token_transfer && !is_standard_auth { - return Err(ParserError::parser_invalid_transaction_payload); + return Err(ParserError::InvalidTransactionPayload); } // At this point we do not know who the signer is @@ -282,10 +282,10 @@ impl<'a> Transaction<'a> { #[inline(never)] fn read_header(&mut self) -> Result<(), ParserError> { let (next_data, version) = TransactionVersion::from_bytes(self.remainder) - .map_err(|_| ParserError::parser_unexpected_value)?; + .map_err(|_| ParserError::UnexpectedValue)?; - let (next_data, chain_id) = be_u32::<'a, ParserError>(next_data) - .map_err(|_| ParserError::parser_unexpected_value)?; + let (next_data, chain_id) = + be_u32::<_, ParserError>(next_data).map_err(|_| ParserError::UnexpectedValue)?; self.version = version; self.chain_id = chain_id; @@ -299,7 +299,7 @@ impl<'a> Transaction<'a> { #[inline(never)] fn read_auth(&mut self) -> Result<(), ParserError> { let (next_data, auth) = TransactionAuth::from_bytes(self.remainder) - .map_err(|_| ParserError::parser_invalid_auth_type)?; + .map_err(|_| ParserError::InvalidAuthType)?; self.transaction_auth = auth; self.update_remainder(next_data); check_canary!(); @@ -311,7 +311,7 @@ impl<'a> Transaction<'a> { // two modes are included here, // anchor mode and postcondition mode let (raw, _) = take::<_, _, ParserError>(2usize)(self.remainder) - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let modes = arrayref::array_ref!(self.remainder, 0, 2); self.transaction_modes = modes; self.update_remainder(raw); @@ -322,7 +322,7 @@ impl<'a> Transaction<'a> { #[inline(never)] fn read_post_conditions(&mut self) -> Result<(), ParserError> { let (raw, conditions) = PostConditions::from_bytes(self.remainder) - .map_err(|_| ParserError::parser_post_condition_failed)?; + .map_err(|_| ParserError::PostConditionFailed)?; self.post_conditions = conditions; self.update_remainder(raw); check_canary!(); @@ -332,7 +332,7 @@ impl<'a> Transaction<'a> { #[inline(never)] fn read_payload(&mut self) -> Result<(), ParserError> { let (raw, payload) = TransactionPayload::from_bytes(self.remainder) - .map_err(|_| ParserError::parser_invalid_transaction_payload)?; + .map_err(|_| ParserError::InvalidTransactionPayload)?; self.payload = payload; self.update_remainder(raw); check_canary!(); @@ -353,7 +353,7 @@ impl<'a> Transaction<'a> { // Note that if a transaction contains a token-transfer payload, // it MUST have only a standard authorization field. It cannot be sponsored. if (tx.1).5.is_token_transfer_payload() && !(tx.1).2.is_standard_auth() { - return Err(ParserError::parser_invalid_transaction_payload); + return Err(ParserError::InvalidTransactionPayload); } Ok(Self::from(tx)) } @@ -371,7 +371,7 @@ impl<'a> Transaction<'a> { // nonce + origin + fee-rate + payload + post-conditions 3u8.checked_add(self.payload.num_items()) .and_then(|res| res.checked_add(self.post_conditions.num_items)) - .ok_or(ParserError::parser_value_out_of_range) + .ok_or(ParserError::ValueOutOfRange) } fn get_origin_items( @@ -392,8 +392,8 @@ impl<'a> Transaction<'a> { SignerId::Sponsor => self .transaction_auth .sponsor() - .ok_or(ParserError::parser_invalid_auth_type)?, - _ => return Err(ParserError::parser_invalid_auth_type), + .ok_or(ParserError::InvalidAuthType)?, + _ => return Err(ParserError::InvalidAuthType), }; match display_idx { @@ -401,7 +401,7 @@ impl<'a> Transaction<'a> { 0 => { writer_key .write_str("Origin") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let origin_address = origin.signer_address(self.version)?; zxformat::pageString(out_value, origin_address.as_ref(), page_idx) } @@ -409,7 +409,7 @@ impl<'a> Transaction<'a> { 1 => { writer_key .write_str("Nonce") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let nonce_str = origin.nonce_str()?; zxformat::pageString(out_value, nonce_str.as_ref(), page_idx) } @@ -417,7 +417,7 @@ impl<'a> Transaction<'a> { 2 => { writer_key .write_str("Fee (uSTX)") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let fee_str = origin.fee_str()?; zxformat::pageString(out_value, fee_str.as_ref(), page_idx) } @@ -439,15 +439,10 @@ impl<'a> Transaction<'a> { if display_idx >= (num_items - post_conditions_items) { if post_conditions_items == 0 { - return Err(ParserError::parser_display_idx_out_of_range); + return Err(ParserError::DisplayIdxOutOfRange); } - self.post_conditions.get_items( - display_idx, - out_key, - out_value, - page_idx, - num_items as u8, - ) + self.post_conditions + .get_items(display_idx, out_key, out_value, page_idx, num_items) } else { self.payload.get_items( display_idx, @@ -467,7 +462,7 @@ impl<'a> Transaction<'a> { page_idx: u8, ) -> Result { if display_idx >= self.num_items()? { - return Err(ParserError::parser_display_idx_out_of_range); + return Err(ParserError::DisplayIdxOutOfRange); } if display_idx < 3 { @@ -530,9 +525,9 @@ impl<'a> Transaction<'a> { pub fn check_signer_pk_hash(&mut self, signer_pk: &[u8]) -> ParserError { self.signer = self.transaction_auth.check_signer(signer_pk); if self.signer != SignerId::Invalid { - return ParserError::parser_ok; + return ParserError::ParserOk; } - ParserError::parser_invalid_auth_type + ParserError::InvalidAuthType } // returns a slice of the last block to be used in the presighash calculation diff --git a/app/rust/src/parser/transaction_auth.rs b/app/rust/src/parser/transaction_auth.rs index d02a2e27..08f7e070 100644 --- a/app/rust/src/parser/transaction_auth.rs +++ b/app/rust/src/parser/transaction_auth.rs @@ -39,7 +39,7 @@ impl<'a> TransactionAuth<'a> { let auth = match auth_type.1 { 0x04 => Self::standard_from_bytes(auth_type.0)?, 0x05 => Self::sponsored_from_bytes(auth_type.0)?, - _ => return Err(nom::Err::Error(ParserError::parser_invalid_auth_type)), + _ => return Err(nom::Err::Error(ParserError::InvalidAuthType)), }; Ok(auth) } @@ -178,7 +178,7 @@ impl<'a> TransactionAuth<'a> { pub fn write_sponsor_sentinel(buf: &mut [u8]) -> Result { if buf.len() < SPONSOR_SENTINEL_LEN { - return Err(ParserError::parser_no_data); + return Err(ParserError::NoData); } buf.iter_mut() .take(SPONSOR_SENTINEL_LEN) diff --git a/app/rust/src/parser/transaction_payload.rs b/app/rust/src/parser/transaction_payload.rs index a928484f..3e85613a 100644 --- a/app/rust/src/parser/transaction_payload.rs +++ b/app/rust/src/parser/transaction_payload.rs @@ -45,7 +45,7 @@ impl TokenTranferPrincipal { match v { 5 => Ok(Self::Standard), 6 => Ok(Self::Contract), - _ => Err(ParserError::parser_invalid_token_transfer_principal), + _ => Err(ParserError::InvalidTokenTransferPrincipal), } } } @@ -77,10 +77,10 @@ impl<'a> StxTokenTransfer<'a> { pub fn amount(&self) -> Result { let at = self.0.len() - 34 - 8; - let amount = self.0.get(at..).ok_or(ParserError::parser_no_data)?; - be_u64::<'a, ParserError>(amount) + let amount = self.0.get(at..).ok_or(ParserError::NoData)?; + be_u64::<_, ParserError>(amount) .map(|res| res.1) - .map_err(|_| ParserError::parser_unexpected_buffer_end) + .map_err(|_| ParserError::UnexpectedBufferEnd) } pub fn raw_address(&self) -> &[u8] { @@ -94,12 +94,10 @@ impl<'a> StxTokenTransfer<'a> { &self, ) -> Result, ParserError> { // Skips the principal-id at [0] and uses hash_mode and the follow 20-bytes - let version = self.0.get(1).ok_or(ParserError::parser_no_data)?; + let version = self.0.get(1).ok_or(ParserError::NoData)?; c32::c32_address( *version, - self.0 - .get(2..22) - .ok_or(ParserError::parser_invalid_address)?, + self.0.get(2..22).ok_or(ParserError::InvalidAddress)?, ) } @@ -128,7 +126,7 @@ impl<'a> StxTokenTransfer<'a> { 0 => { writer_key .write_str("Amount uSTX") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let amount = self.amount_stx()?; check_canary!(); zxformat::pageString(out_value, amount.as_ref(), page_idx) @@ -137,7 +135,7 @@ impl<'a> StxTokenTransfer<'a> { 1 => { writer_key .write_str("To") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let recipient = self.encoded_address()?; check_canary!(); zxformat::pageString(out_value, recipient.as_ref(), page_idx) @@ -145,11 +143,11 @@ impl<'a> StxTokenTransfer<'a> { 2 => { writer_key .write_str("Memo") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; check_canary!(); zxformat::pageString(out_value, self.memo(), page_idx) } - _ => Err(ParserError::parser_display_idx_out_of_range), + _ => Err(ParserError::DisplayIdxOutOfRange), } } } @@ -164,10 +162,10 @@ impl<'a> Arguments<'a> { fn from_bytes(bytes: &'a [u8]) -> Result<(&[u8], Self), nom::Err> { check_canary!(); - let (_, num_args) = be_u32(bytes)?; + let (_, num_args) = be_u32::<_, ParserError>(bytes)?; if num_args > MAX_NUM_ARGS && !is_expert_mode() { - return Err(ParserError::parser_invalid_transaction_payload.into()); + return Err(ParserError::InvalidTransactionPayload.into()); } let (raw, args) = take(bytes.len())(bytes)?; @@ -179,9 +177,9 @@ impl<'a> Arguments<'a> { } pub fn num_args(&self) -> Result { - be_u32::<'a, ParserError>(self.0) + be_u32::<_, ParserError>(self.0) .map(|res| res.1) - .map_err(|_| ParserError::parser_unexpected_error) + .map_err(|_| ParserError::UnexpectedError) } pub fn argument_at(&self, at: usize) -> Result, ParserError> { @@ -195,7 +193,7 @@ impl<'a> Arguments<'a> { while idx < num_args as usize { let (bytes, value) = Value::from_bytes::(leftover) - .map_err(|_| ParserError::parser_invalid_argument_id)?; + .map_err(|_| ParserError::InvalidArgumentId)?; leftover = bytes; if idx == at { @@ -203,7 +201,7 @@ impl<'a> Arguments<'a> { } idx += 1; } - Err(ParserError::parser_display_idx_out_of_range) + Err(ParserError::DisplayIdxOutOfRange) } } @@ -237,7 +235,7 @@ impl<'a> TransactionContractCall<'a> { ContractName::from_bytes(&self.0[(HASH160_LEN + 1)..]) .and_then(|b| ClarityName::from_bytes(b.0)) .map(|res| (res.1).0) - .map_err(|_| ParserError::parser_unexpected_error) + .map_err(|_| ParserError::UnexpectedError) } pub fn function_args(&self) -> Result, ParserError> { @@ -245,7 +243,7 @@ impl<'a> TransactionContractCall<'a> { .and_then(|b| ClarityName::from_bytes(b.0)) .and_then(|c| Arguments::from_bytes(c.0)) .map(|res| res.1) - .map_err(|_| ParserError::parser_invalid_argument_id) + .map_err(|_| ParserError::InvalidArgumentId) } pub fn num_args(&self) -> Result { @@ -275,13 +273,13 @@ impl<'a> TransactionContractCall<'a> { let mut writer = zxformat::Writer::new(key); writer .write_str("stacked uSTX") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; } else if name == "delegate-stx".as_bytes() { key.iter_mut().for_each(|v| *v = 0); let mut writer = zxformat::Writer::new(key); writer .write_str("delegated uSTX") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; } } Ok(()) @@ -295,7 +293,7 @@ impl<'a> TransactionContractCall<'a> { page_idx: u8, ) -> Result { if display_idx < CONTRACT_CALL_BASE_ITEMS { - return Err(ParserError::parser_display_idx_out_of_range); + return Err(ParserError::DisplayIdxOutOfRange); } let arg_num = display_idx - CONTRACT_CALL_BASE_ITEMS; @@ -310,10 +308,10 @@ impl<'a> TransactionContractCall<'a> { writer_key .write_str("arg") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; writer_key .write_str(arg_num_str) - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; } // return the value content including the valueID @@ -321,7 +319,7 @@ impl<'a> TransactionContractCall<'a> { match value.value_id() { ValueId::Int => { - let value = value.int().ok_or(ParserError::parser_unexpected_error)?; + let value = value.int().ok_or(ParserError::UnexpectedError)?; let mut buff = [0u8; 39]; zxformat::pageString( @@ -331,7 +329,7 @@ impl<'a> TransactionContractCall<'a> { ) } ValueId::UInt => { - let value = value.uint().ok_or(ParserError::parser_unexpected_error)?; + let value = value.uint().ok_or(ParserError::UnexpectedError)?; let mut buff = [0u8; 39]; if arg_num == 0 { @@ -381,7 +379,7 @@ impl<'a> TransactionContractCall<'a> { .apdu_unwrap() .copy_from_slice(&address[0..address.len()]); - data[address.len()] = '.' as u8; + data[address.len()] = b'.'; let len = address.len() + 1; // wont panic as we reserved enough space. @@ -420,7 +418,7 @@ impl<'a> TransactionContractCall<'a> { let num_args = self.num_args()? as u8; num_args .checked_add(CONTRACT_CALL_BASE_ITEMS) - .ok_or(ParserError::parser_value_out_of_range) + .ok_or(ParserError::ValueOutOfRange) } fn get_base_items( @@ -431,7 +429,7 @@ impl<'a> TransactionContractCall<'a> { page_idx: u8, ) -> Result { if display_idx > CONTRACT_CALL_BASE_ITEMS { - return Err(ParserError::parser_display_idx_out_of_range); + return Err(ParserError::DisplayIdxOutOfRange); } let mut writer_key = zxformat::Writer::new(out_key); match display_idx { @@ -439,7 +437,7 @@ impl<'a> TransactionContractCall<'a> { 0 => { writer_key .write_str("Contract address") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let address = self.contract_address()?; check_canary!(); zxformat::pageString(out_value, address.as_ref(), page_idx) @@ -448,7 +446,7 @@ impl<'a> TransactionContractCall<'a> { 1 => { writer_key .write_str("Contract name") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let name = self.contract_name()?; check_canary!(); zxformat::pageString(out_value, name.name(), page_idx) @@ -457,12 +455,12 @@ impl<'a> TransactionContractCall<'a> { 2 => { writer_key .write_str("Function name") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; let name = self.function_name()?; check_canary!(); zxformat::pageString(out_value, name, page_idx) } - _ => Err(ParserError::parser_display_idx_out_of_range), + _ => Err(ParserError::DisplayIdxOutOfRange), } } @@ -500,7 +498,7 @@ impl<'a> VersionedSmartContract<'a> { let parse_length_1_byte = map(be_u8, |length| std::cmp::min(length, 128u8) as usize); let parse_length_4_bytes = flat_map(be_u32, take); - let parser = tuple(( + let mut parser = tuple(( parse_tag, flat_map(parse_length_1_byte, take), parse_length_4_bytes, @@ -535,12 +533,12 @@ impl<'a> VersionedSmartContract<'a> { 0 => { writer_key .write_str("Contract Name") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; check_canary!(); let name = self.contract_name()?; zxformat::pageString(out_value, name.name(), page_idx) } - _ => Err(ParserError::parser_value_out_of_range), + _ => Err(ParserError::ValueOutOfRange), } } } @@ -561,7 +559,7 @@ impl<'a> TransactionSmartContract<'a> { let parse_length_1_byte = map(be_u8, |length| std::cmp::min(length, 128u8) as usize); let parse_length_4_bytes = flat_map(be_u32, take); - let parser = tuple((flat_map(parse_length_1_byte, take), parse_length_4_bytes)); + let mut parser = tuple((flat_map(parse_length_1_byte, take), parse_length_4_bytes)); let (_, (name, code)) = parser(bytes)?; // 1-byte name_len, name, 4-byte code_len, code @@ -591,12 +589,12 @@ impl<'a> TransactionSmartContract<'a> { 0 => { writer_key .write_str("Contract Name") - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + .map_err(|_| ParserError::UnexpectedBufferEnd)?; check_canary!(); let name = self.contract_name()?; zxformat::pageString(out_value, name.name(), page_idx) } - _ => Err(ParserError::parser_value_out_of_range), + _ => Err(ParserError::ValueOutOfRange), } } } @@ -618,7 +616,7 @@ impl TransactionPayloadId { 1 => Ok(Self::SmartContract), 2 => Ok(Self::ContractCall), 6 => Ok(Self::VersionedSmartContract), - _ => Err(ParserError::parser_invalid_transaction_payload), + _ => Err(ParserError::InvalidTransactionPayload), } } } diff --git a/app/rust/src/parser/value.rs b/app/rust/src/parser/value.rs index 6017938f..cc6a1e2d 100644 --- a/app/rust/src/parser/value.rs +++ b/app/rust/src/parser/value.rs @@ -48,7 +48,7 @@ impl TryFrom for ValueId { fn try_from(value: u8) -> Result { match value { 0x00..=0x0e => unsafe { Ok(core::mem::transmute::(value)) }, - _ => Err(ParserError::parser_unexpected_type), + _ => Err(ParserError::UnexpectedType), } } } @@ -112,7 +112,7 @@ impl<'a> Value<'a> { pub fn value_len(bytes: &'a [u8]) -> Result> { if bytes.is_empty() { - return Err(ParserError::parser_unexpected_buffer_end.into()); + return Err(ParserError::UnexpectedBufferEnd.into()); } let mut depth = 0; @@ -131,8 +131,7 @@ impl<'a> Value<'a> { } // get value_id - let (rem, id) = - ValueId::from_bytes(bytes).map_err(|_| ParserError::parser_unexpected_value)?; + let (rem, id) = ValueId::from_bytes(bytes).map_err(|_| ParserError::UnexpectedValue)?; let len = match id { ValueId::Int | ValueId::UInt => BIG_INT_SIZE, @@ -152,17 +151,17 @@ impl<'a> Value<'a> { ValueId::StringAscii | ValueId::StringUtf8 => { let (rem, len) = be_u32(rem)?; if rem.len() < len as usize { - return Err(ParserError::parser_unexpected_buffer_end.into()); + return Err(ParserError::UnexpectedBufferEnd.into()); } if id == ValueId::StringAscii && !(rem[..len as usize]).is_ascii() { - return Err(ParserError::parser_unexpected_type.into()); + return Err(ParserError::UnexpectedType.into()); } len as usize + 4 } // parse the other types that require recursion ValueId::ResponseErr | ValueId::ResponseOk | ValueId::OptionalSome => { if rem.is_empty() { - return Err(nom::Err::Error(ParserError::parser_unexpected_buffer_end)); + return Err(nom::Err::Error(ParserError::UnexpectedBufferEnd)); } // Increase recursion counter @@ -250,7 +249,7 @@ impl<'a> Value<'a> { // Check iteration counter if depth > MAX_DEPTH { c_zemu_log_stack("Error recursion limit reached!"); - return Err(ParserError::parser_recursion_limit.into()); + return Err(ParserError::RecursionLimit); } Ok(()) } diff --git a/app/rust/src/parser/value/int.rs b/app/rust/src/parser/value/int.rs index aa142f62..7d059563 100644 --- a/app/rust/src/parser/value/int.rs +++ b/app/rust/src/parser/value/int.rs @@ -30,7 +30,7 @@ pub struct UInt128(u128); impl Int128 { pub(crate) fn new(value: &super::Value) -> Result { if !matches!(value.value_id(), ValueId::Int) { - return Err(ParserError::parser_unexpected_type.into()); + return Err(ParserError::UnexpectedType); } // omit value_type as we know it is an int @@ -41,11 +41,11 @@ impl Int128 { pub fn from_bytes(data: &[u8]) -> Result<(&[u8], Self), nom::Err> { if data.is_empty() { - return Err(ParserError::parser_unexpected_buffer_end.into()); + return Err(ParserError::UnexpectedBufferEnd.into()); } if !matches!(ValueId::try_from(data[0])?, ValueId::Int) { - return Err(ParserError::parser_unexpected_type.into()); + return Err(ParserError::UnexpectedType.into()); } // check the number is parsed @@ -61,7 +61,7 @@ impl Int128 { impl UInt128 { pub(crate) fn new(value: &super::Value) -> Result { if !matches!(value.value_id(), ValueId::UInt) { - return Err(ParserError::parser_unexpected_type.into()); + return Err(ParserError::UnexpectedType); } // omit value_type as we know it is an uint @@ -72,11 +72,11 @@ impl UInt128 { pub fn from_bytes(data: &[u8]) -> Result<(&[u8], Self), nom::Err> { if data.is_empty() { - return Err(ParserError::parser_unexpected_buffer_end.into()); + return Err(ParserError::UnexpectedBufferEnd.into()); } if !matches!(ValueId::try_from(data[0])?, ValueId::UInt) { - return Err(ParserError::parser_unexpected_type.into()); + return Err(ParserError::UnexpectedType.into()); } // check the number is parsed diff --git a/app/rust/src/parser/value/string.rs b/app/rust/src/parser/value/string.rs index cca98977..4235fe60 100644 --- a/app/rust/src/parser/value/string.rs +++ b/app/rust/src/parser/value/string.rs @@ -34,7 +34,7 @@ impl<'a> String<'a> { let (rem, s) = Self::from_bytes(bytes)?; if !s.0.is_ascii() { - return Err(ParserError::parser_unexpected_value.into()); + return Err(ParserError::UnexpectedValue.into()); } Ok((rem, s)) @@ -56,7 +56,7 @@ impl<'a> String<'a> { impl<'a> StringAscii<'a> { pub(crate) fn new(value: &Value<'a>) -> Result, ParserError> { if !matches!(value.value_id(), ValueId::StringAscii) { - return Err(ParserError::parser_unexpected_type.into()); + return Err(ParserError::UnexpectedType); } String::from_bytes_ascii(value.payload()) @@ -69,7 +69,7 @@ impl<'a> StringAscii<'a> { let (rem, id) = ValueId::from_bytes(bytes)?; if !matches!(id, ValueId::StringAscii) { - return Err(ParserError::parser_unexpected_type.into()); + return Err(ParserError::UnexpectedType.into()); } let (rem, string) = String::from_bytes_ascii(rem)?; @@ -89,7 +89,7 @@ impl<'a> StringAscii<'a> { impl<'a> StringUtf8<'a> { pub(crate) fn new(value: &Value<'a>) -> Result { if !matches!(value.value_id(), ValueId::StringUtf8) { - return Err(ParserError::parser_unexpected_type.into()); + return Err(ParserError::UnexpectedType); } let (_, string) = String::from_bytes(value.payload())?; @@ -101,7 +101,7 @@ impl<'a> StringUtf8<'a> { let (rem, id) = ValueId::from_bytes(bytes)?; if !matches!(id, ValueId::StringUtf8) { - return Err(ParserError::parser_unexpected_type.into()); + return Err(ParserError::UnexpectedType.into()); } let (rem, string) = String::from_bytes(rem)?; diff --git a/app/rust/src/parser/value/tuple.rs b/app/rust/src/parser/value/tuple.rs index e383e825..8663df2e 100644 --- a/app/rust/src/parser/value/tuple.rs +++ b/app/rust/src/parser/value/tuple.rs @@ -12,7 +12,7 @@ impl<'a> Tuple<'a> { // That is wrapped-up here to better access/handle tuple fields/operations pub(crate) fn new(value: &'a Value) -> Result, ParserError> { if !matches!(value.value_id(), ValueId::Tuple) { - return Err(ParserError::parser_unexpected_type); + return Err(ParserError::UnexpectedType); } // Omit the type @@ -22,7 +22,7 @@ impl<'a> Tuple<'a> { pub fn num_elements(&self) -> usize { // This wont panic as this type was already parsed. // and is wrapped-up here to better access its fields. - be_u32::(self.0) + be_u32::<_, ParserError>(self.0) .map(|(_, len)| len as usize) .unwrap() } @@ -94,7 +94,8 @@ mod test { let mut count = 0; for (name, _) in tuple.iter() { count += 1; - assert!(names.contains(&name.name().to_vec())); + let key = name.name().to_vec(); + assert!(names.contains(&key)); } assert_eq!(count, tuple.num_elements()); @@ -118,7 +119,8 @@ mod test { let mut count = 0; for (name, _) in tuple.iter() { count += 1; - assert!(names.contains(&name.name().to_vec())); + let key = name.name().to_vec(); + assert!(names.contains(&key)); } assert_eq!(count, tuple.num_elements()); } diff --git a/app/rust/src/zxformat.rs b/app/rust/src/zxformat.rs index 7c55d525..6f78ea2a 100644 --- a/app/rust/src/zxformat.rs +++ b/app/rust/src/zxformat.rs @@ -42,7 +42,7 @@ macro_rules! num_to_str { ($name: ident, $number: ty) => { pub fn $name(output: &mut [u8], number: $number) -> Result { if output.len() < 2 { - return Err(ParserError::parser_unexpected_buffer_end); + return Err(ParserError::UnexpectedBufferEnd); } let len; @@ -50,8 +50,8 @@ macro_rules! num_to_str { #[cfg(any(test, fuzzing))] { let mut writer = Writer::new(output); - core::write!(writer, "{}", number) - .map_err(|_| ParserError::parser_unexpected_buffer_end)?; + core::write!(writer, "{}", number).map_err(|_| ParserError::UnexpectedBufferEnd)?; + len = writer.offset; } @@ -144,7 +144,7 @@ pub(crate) fn fpstr_to_str( let mut writer = Writer::new(out); // Reproduce our input value as a str - let str = core::str::from_utf8(value).map_err(|_| ParserError::parser_context_invalid_chars)?; + let str = core::str::from_utf8(value).map_err(|_| ParserError::ContextInvalidChars)?; let in_len = str.len(); // edge case when no decimals @@ -155,27 +155,25 @@ pub(crate) fn fpstr_to_str( return writer .write_char('0') .map(|_| 1) - .map_err(|_| ParserError::parser_unexpected_buffer_end); + .map_err(|_| ParserError::UnexpectedBufferEnd); } return writer .write_str(str) .map(|_| writer.offset) - .map_err(|_| ParserError::parser_unexpected_buffer_end); + .map_err(|_| ParserError::UnexpectedBufferEnd); } if in_len <= decimals as usize { if str.starts_with('-') { // we need to remove the sign before continuing - let remainder = str - .get(1..) - .ok_or(ParserError::parser_unexpected_characters)?; + let remainder = str.get(1..).ok_or(ParserError::UnexpectedCharacters)?; return write!(&mut writer, "-0.{:0>1$}", remainder, decimals as usize) .map(|_| writer.offset) - .map_err(|_| ParserError::parser_unexpected_buffer_end); + .map_err(|_| ParserError::UnexpectedBufferEnd); } return write!(&mut writer, "0.{:0>1$}", str, decimals as usize) .map(|_| writer.offset) - .map_err(|_| ParserError::parser_unexpected_buffer_end); + .map_err(|_| ParserError::UnexpectedBufferEnd); } let fp = in_len - decimals as usize; @@ -183,7 +181,7 @@ pub(crate) fn fpstr_to_str( let right = str.get(fp..in_len).unwrap(); write!(&mut writer, "{}.{}", left, right) .map(|_| writer.offset) - .map_err(|_| ParserError::parser_unexpected_buffer_end) + .map_err(|_| ParserError::UnexpectedBufferEnd) } #[inline(never)] @@ -199,7 +197,7 @@ pub fn pageString(out_value: &mut [u8], in_value: &[u8], page_idx: u8) -> Result let in_len = in_value.len(); if out_len == 0 || in_len == 0 { - return Err(ParserError::parser_no_data); + return Err(ParserError::NoData); } page_count = (in_len / out_len) as u8; let last_chunk_len = in_len % out_len; diff --git a/app/src/coin.h b/app/src/coin.h index 3249ca9c..3c283720 100644 --- a/app/src/coin.h +++ b/app/src/coin.h @@ -20,3 +20,5 @@ #else #error "APP MODE IS NOT SUPPORTED" #endif + +#define SK_LEN_25519 64u diff --git a/app/src/common/actions.h b/app/src/common/actions.h index bdc936c1..93051fde 100644 --- a/app/src/common/actions.h +++ b/app/src/common/actions.h @@ -128,9 +128,8 @@ __Z_INLINE void app_sign() { } if (err != zxerr_ok) { - uint8_t errLen = getErrorMessage((char *) G_io_apdu_buffer, IO_APDU_BUFFER_SIZE - 2, err); - set_code(G_io_apdu_buffer, errLen, APDU_CODE_SIGN_VERIFY_ERROR); - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, errLen + 2); + set_code(G_io_apdu_buffer, 0, APDU_CODE_SIGN_VERIFY_ERROR); + io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); return; } @@ -140,9 +139,8 @@ __Z_INLINE void app_sign() { uint16_t replyLen; err = crypto_sign(G_io_apdu_buffer, IO_APDU_BUFFER_SIZE - 3, presig_hash, CX_SHA256_SIZE, &replyLen); if (err != zxerr_ok) { - uint8_t errLen = getErrorMessage((char *) G_io_apdu_buffer, IO_APDU_BUFFER_SIZE - 2, err); - set_code(G_io_apdu_buffer, errLen, APDU_CODE_SIGN_VERIFY_ERROR); - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, errLen + 2); + set_code(G_io_apdu_buffer, 0, APDU_CODE_SIGN_VERIFY_ERROR); + io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); return; } @@ -183,18 +181,15 @@ __Z_INLINE void app_sign() { break; } default: { - err = zxerr_no_data; - uint8_t errLen = getErrorMessage((char *) G_io_apdu_buffer, IO_APDU_BUFFER_SIZE - 2, err); - set_code(G_io_apdu_buffer, errLen, APDU_CODE_SIGN_VERIFY_ERROR); - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, errLen + 2); + set_code(G_io_apdu_buffer, 0, APDU_CODE_SIGN_VERIFY_ERROR); + io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); return; } } if (replyLen == 0) { - uint8_t errLen = getErrorMessage((char *) G_io_apdu_buffer, IO_APDU_BUFFER_SIZE - 2, zxerr_no_data); - set_code(G_io_apdu_buffer, errLen, APDU_CODE_SIGN_VERIFY_ERROR); - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, errLen + 2); + set_code(G_io_apdu_buffer, 0, APDU_CODE_SIGN_VERIFY_ERROR); + io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); return; } diff --git a/app/src/common/tx.c b/app/src/common/tx.c index 805ecf4b..29129016 100644 --- a/app/src/common/tx.c +++ b/app/src/common/tx.c @@ -200,3 +200,19 @@ transaction_type_t tx_get_transaction_type(){ zxerr_t tx_structured_msg_hash(uint8_t *out, uint16_t out_len){ return parser_structured_msg_hash(out, out_len); } + +uint16_t get_error_message(char *out, uint16_t outLen, parser_error_t error_code) { + const char *error_message = parser_getErrorDescription(error_code); + if (error_message == NULL || outLen == 0) { + return 0; + } + + uint16_t len = strlen(error_message); + + if (outLen < len ) + return 0; + + memcpy(out, error_message, len); + + return len; +} diff --git a/app/src/common/tx.h b/app/src/common/tx.h index c95dca65..ff8ff986 100644 --- a/app/src/common/tx.h +++ b/app/src/common/tx.h @@ -90,3 +90,5 @@ uint16_t tx_previous_signer_data(uint8_t **data); transaction_type_t tx_get_transaction_type(); zxerr_t tx_structured_msg_hash(uint8_t *out, uint16_t out_len); + +uint16_t get_error_message(char *out, uint16_t outLen, parser_error_t error_code); diff --git a/app/src/crypto.c b/app/src/crypto.c index 270c3192..ac56fa5a 100644 --- a/app/src/crypto.c +++ b/app/src/crypto.c @@ -32,7 +32,6 @@ bool isTestnet() { hdPath[1] == HDPATH_1_TESTNET; } -#if defined(TARGET_NANOS) || defined(TARGET_NANOX) || defined(TARGET_NANOS2) || defined(TARGET_STAX) #include "cx.h" bool ripemd160(uint8_t *in, uint16_t inLen, uint8_t *out) { @@ -128,47 +127,44 @@ uint16_t crypto_fillAuthkey_secp256k1(uint8_t *buffer, uint16_t buffer_len) { zxerr_t crypto_extractPublicKey(const uint32_t *path, uint32_t path_len, uint8_t *pubKey, uint16_t pubKeyLen) { cx_ecfp_public_key_t cx_publicKey; cx_ecfp_private_key_t cx_privateKey; - uint8_t privateKeyData[32]; + uint8_t privateKeyData[SK_LEN_25519]; MEMZERO(&cx_publicKey, sizeof(cx_publicKey)); if (pubKeyLen < PK_LEN_SECP256K1 || path_len == 0) { return zxerr_invalid_crypto_settings; } - zxerr_t err = zxerr_ok; - BEGIN_TRY - { - TRY { - os_perso_derive_node_bip32(CX_CURVE_256K1, - path, - path_len, - privateKeyData, NULL); - - cx_ecfp_init_private_key(CX_CURVE_256K1, privateKeyData, 32, &cx_privateKey); - cx_ecfp_init_public_key(CX_CURVE_256K1, NULL, 0, &cx_publicKey); - cx_ecfp_generate_pair(CX_CURVE_256K1, &cx_publicKey, &cx_privateKey, 1); - - // Format pubkey - for (int i = 0; i < 32; i++) { - pubKey[i] = cx_publicKey.W[64 - i]; - } - cx_publicKey.W[0] = cx_publicKey.W[64] & 1 ? 0x03 : 0x02; // "Compress" public key in place - if ((cx_publicKey.W[32] & 1) != 0) { - pubKey[31] |= 0x80; - } - MEMCPY(pubKey, cx_publicKey.W, PK_LEN_SECP256K1); - } - CATCH_ALL { - err = zxerr_ledger_api_error; - } - FINALLY { - MEMZERO(&cx_privateKey, sizeof(cx_privateKey)); - MEMZERO(privateKeyData, 32); - } + zxerr_t error = zxerr_unknown; + CATCH_CXERROR(os_derive_bip32_no_throw(CX_CURVE_256K1, + path, + path_len, + privateKeyData, NULL)); + + CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_256K1, privateKeyData, 32, &cx_privateKey)); + CATCH_CXERROR(cx_ecfp_init_public_key_no_throw(CX_CURVE_256K1, NULL, 0, &cx_publicKey)); + CATCH_CXERROR(cx_ecfp_generate_pair_no_throw(CX_CURVE_256K1, &cx_publicKey, &cx_privateKey, 1)); + + error = zxerr_ok; + + // Format pubkey + for (int i = 0; i < 32; i++) { + pubKey[i] = cx_publicKey.W[64 - i]; + } + cx_publicKey.W[0] = cx_publicKey.W[64] & 1 ? 0x03 : 0x02; // "Compress" public key in place + if ((cx_publicKey.W[32] & 1) != 0) { + pubKey[31] |= 0x80; + } + MEMCPY(pubKey, cx_publicKey.W, PK_LEN_SECP256K1); + +catch_cx_error: + MEMZERO(&cx_privateKey, sizeof(cx_privateKey)); + MEMZERO(privateKeyData, sizeof(privateKeyData)); + + if (error != zxerr_ok) { + MEMZERO(pubKey, pubKeyLen); } - END_TRY; - return err; + return error; } bool crypto_extractPublicKeyHash(uint8_t *pubKeyHash, uint16_t pubKeyLen) { @@ -183,6 +179,7 @@ bool crypto_extractPublicKeyHash(uint8_t *pubKeyHash, uint16_t pubKeyLen) { return false; } +#ifdef APP_TESTING { zemu_log("pubKey: ***"); char buffer[PK_LEN_SECP256K1 * 3]; @@ -190,6 +187,7 @@ bool crypto_extractPublicKeyHash(uint8_t *pubKeyHash, uint16_t pubKeyLen) { zemu_log(buffer); zemu_log("\n"); } +#endif // calculates the sha256 + ripemd160 address_temp_t address_temp; @@ -226,53 +224,35 @@ zxerr_t crypto_sign(uint8_t *buffer, uint16_t signatureMaxlen, const uint8_t *me #endif cx_ecfp_private_key_t cx_privateKey; - uint8_t privateKeyData[32]; - int signatureLength = 0; + uint8_t privateKeyData[SK_LEN_25519]; unsigned int info = 0; signature_t *const signature = (signature_t *) buffer; zxerr_t zxerr = zxerr_unknown; - BEGIN_TRY - { - TRY - { - // Generate keys - os_perso_derive_node_bip32(CX_CURVE_256K1, - hdPath, - hdPath_len, - privateKeyData, NULL); - - cx_ecfp_init_private_key(CX_CURVE_256K1, privateKeyData, 32, &cx_privateKey); - - // Sign - signatureLength = cx_ecdsa_sign(&cx_privateKey, - CX_RND_RFC6979 | CX_LAST, - CX_SHA256, - message, - CX_SHA256_SIZE, - signature->der_signature, - sizeof_field(signature_t, der_signature), - &info); - - zxerr = zxerr_ok; - } - CATCH_ALL { - signatureLength = 0; - zxerr = zxerr_ledger_api_error; - }; - FINALLY { - MEMZERO(&cx_privateKey, sizeof(cx_privateKey)); - MEMZERO(privateKeyData, 32); - } - } - END_TRY; - if(zxerr != zxerr_ok) { - return zxerr; - } + CATCH_CXERROR(os_derive_bip32_no_throw(CX_CURVE_256K1, + hdPath, + hdPath_len, + privateKeyData, NULL)); + + CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_256K1, privateKeyData, 32, &cx_privateKey)); + + // Sign + size_t signatureLength = sizeof_field(signature_t, der_signature); + CATCH_CXERROR(cx_ecdsa_sign_no_throw(&cx_privateKey, + CX_RND_RFC6979 | CX_LAST, + CX_SHA256, + message, + CX_SHA256_SIZE, + signature->der_signature, + &signatureLength, + &info)); + + zxerr = zxerr_ok; err_convert_e err = convertDERtoRSV(signature->der_signature, info, signature->r, signature->s, &signature->v); + if (err != no_error) { return zxerr_encoding_failed; } @@ -284,9 +264,13 @@ zxerr_t crypto_sign(uint8_t *buffer, uint16_t signatureMaxlen, const uint8_t *me sizeof_field(signature_t, post_sighash) + signatureLength; - return zxerr; -} - -#endif +catch_cx_error: + MEMZERO(&cx_privateKey, sizeof(cx_privateKey)); + MEMZERO(privateKeyData, 32); + if (zxerr != zxerr_ok) { + MEMZERO(signature, signatureMaxlen); + } + return zxerr; +} diff --git a/app/src/parser_common.h b/app/src/parser_common.h index d5cec28d..ae6f1c6d 100644 --- a/app/src/parser_common.h +++ b/app/src/parser_common.h @@ -29,56 +29,55 @@ extern "C" { typedef enum { // Generic errors parser_ok = 0, - parser_no_data, - parser_init_context_empty, - parser_display_idx_out_of_range, - parser_display_page_out_of_range, - parser_unexpected_error, - parser_no_memory_for_state, + parser_no_data = 1, + parser_init_context_empty = 2, + parser_display_idx_out_of_range = 3, + parser_display_page_out_of_range = 4, + parser_unexpected_error = 5, + parser_no_memory_for_state = 6, // Context related errors - parser_context_mismatch, - parser_context_unexpected_size, - parser_context_invalid_chars, - parser_context_unknown_prefix, + parser_context_mismatch = 7, + parser_context_unexpected_size = 8, + parser_context_invalid_chars = 9, + parser_context_unknown_prefix = 10, // Required fields - parser_required_nonce, - parser_required_method, + parser_required_nonce = 11, + parser_required_method = 12, //////////////////////// // Coin specific - parser_post_condition_failed, - parser_invalid_contract_name, - parser_invalid_asset_name, - parser_invalid_clarity_name, - parser_invalid_fungible_code, - parser_invalid_non_fungible_code, - parser_invalid_asset_info, - parser_invalid_post_condition, - parser_invalid_post_condition_principal, - parser_invalid_hash_mode, - parser_invalid_signature, - parser_invalid_pubkey_encoding, - parser_invalid_auth_type, - parser_invalid_argument_id, - parser_invalid_transaction_payload, - parser_invalid_address_version, - parser_stacks_string_too_long, - parser_unexpected_type, - parser_unexpected_buffer_end, - parser_unexpected_value, - parser_unexpected_number_items, - parser_unexpected_characters, - parser_unexpected_field, - parser_value_out_of_range, - parser_invalid_address, - parser_invalid_token_transfer_type, - parser_invalid_bytestr_message, - parser_invalid_jwt, - parser_invalid_structured_msg, - parser_crypto_error, - parser_invalid_token_transfer_principal, - parser_recursion_limit, + parser_post_condition_failed = 13, + parser_invalid_contract_name = 14, + parser_invalid_asset_name = 15, + parser_invalid_clarity_name = 16, + parser_invalid_fungible_code = 17, + parser_invalid_non_fungible_code = 18, + parser_invalid_asset_info = 19, + parser_invalid_post_condition = 20, + parser_invalid_post_condition_principal = 21, + parser_invalid_hash_mode = 22, + parser_invalid_signature = 23, + parser_invalid_pubkey_encoding = 24, + parser_invalid_auth_type = 25, + parser_invalid_argument_id = 26, + parser_invalid_transaction_payload = 27, + parser_invalid_address_version = 28, + parser_stacks_string_too_long = 29, + parser_unexpected_type = 30, + parser_unexpected_buffer_end = 31, + parser_unexpected_value = 32, + parser_unexpected_number_items = 33, + parser_unexpected_characters = 34, + parser_unexpected_field = 35, + parser_value_out_of_range = 36, + parser_invalid_address = 37, + parser_invalid_token_transfer_type = 38, + parser_invalid_bytestr_message = 39, + parser_invalid_jwt = 40, + parser_invalid_structured_msg = 41, + parser_crypto_error = 42, + parser_invalid_token_transfer_principal = 43, + parser_recursion_limit = 44, } parser_error_t; - typedef struct { const uint8_t *buffer; uint16_t bufferLen; diff --git a/cmake/conan/CMakeLists.txt b/cmake/conan/CMakeLists.txt deleted file mode 100644 index 4899e70e..00000000 --- a/cmake/conan/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -# Download automatically, you can also just copy the conan.cmake file - -if (NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake") - message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan") - file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/v0.13/conan.cmake" - "${CMAKE_BINARY_DIR}/conan.cmake") -endif () -include(${CMAKE_BINARY_DIR}/conan.cmake) - -conan_check(REQUIRED) - -conan_cmake_run(CONANFILE conanfile.txt BASIC_SETUP CMAKE_TARGETS BUILD missing) diff --git a/cmake/gtest/CMakeLists.txt b/cmake/gtest/CMakeLists.txt deleted file mode 100644 index eea7d079..00000000 --- a/cmake/gtest/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -############################## -# Google Test -# Based on instructions in https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project -# Download and unpack googletest at configure time -configure_file(CMakeLists.txt.gtest.in ${CMAKE_BINARY_DIR}/googletest-download/CMakeLists.txt) - -execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download) -if (result) - message(FATAL_ERROR "CMake step for googletest failed: ${result}") -endif () - -execute_process(COMMAND ${CMAKE_COMMAND} --build . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download) -if (result) - message(FATAL_ERROR "Build step for googletest failed: ${result}") -endif () - -# Prevent overriding the parent project's compiler/linker settings on Windows -set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) - -add_subdirectory( - ${CMAKE_BINARY_DIR}/googletest-src - ${CMAKE_BINARY_DIR}/googletest-build -) - -if (CMAKE_VERSION VERSION_LESS 2.8.11) - include_directories("${gtest_SOURCE_DIR}/include") -endif () diff --git a/cmake/gtest/CMakeLists.txt.gtest.in b/cmake/gtest/CMakeLists.txt.gtest.in deleted file mode 100644 index cd4ae6c7..00000000 --- a/cmake/gtest/CMakeLists.txt.gtest.in +++ /dev/null @@ -1,16 +0,0 @@ -# Based on https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project -cmake_minimum_required(VERSION 2.8.2) - -project(googletest-download NONE) - -include(ExternalProject) -ExternalProject_Add(googletest - GIT_REPOSITORY https://github.com/google/googletest.git - GIT_TAG release-1.11.0 - SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src" - BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - TEST_COMMAND "" - ) diff --git a/deps/ledger-zxlib b/deps/ledger-zxlib index cf1a6b80..3307115b 160000 --- a/deps/ledger-zxlib +++ b/deps/ledger-zxlib @@ -1 +1 @@ -Subproject commit cf1a6b80c483104144a20b0f76ef7b403edd8c07 +Subproject commit 3307115b7a3b26bed7370c80a7c1a6b1da3295ed diff --git a/deps/nanos-secure-sdk b/deps/nanos-secure-sdk new file mode 160000 index 00000000..7583aee3 --- /dev/null +++ b/deps/nanos-secure-sdk @@ -0,0 +1 @@ +Subproject commit 7583aee3e377129703d17576b85d3719eb58cce0 diff --git a/deps/nanosplus-secure-sdk b/deps/nanosplus-secure-sdk new file mode 160000 index 00000000..7583aee3 --- /dev/null +++ b/deps/nanosplus-secure-sdk @@ -0,0 +1 @@ +Subproject commit 7583aee3e377129703d17576b85d3719eb58cce0 diff --git a/deps/nanox-secure-sdk b/deps/nanox-secure-sdk new file mode 160000 index 00000000..7583aee3 --- /dev/null +++ b/deps/nanox-secure-sdk @@ -0,0 +1 @@ +Subproject commit 7583aee3e377129703d17576b85d3719eb58cce0 diff --git a/deps/stax-secure-sdk b/deps/stax-secure-sdk new file mode 160000 index 00000000..7583aee3 --- /dev/null +++ b/deps/stax-secure-sdk @@ -0,0 +1 @@ +Subproject commit 7583aee3e377129703d17576b85d3719eb58cce0 diff --git a/js/package.json b/js/package.json index aeffe347..3b2de198 100644 --- a/js/package.json +++ b/js/package.json @@ -21,7 +21,7 @@ "homepage": "https://github.com/zondax/ledger-stacks", "dependencies": { "@babel/runtime": "^7.12.5", - "@ledgerhq/hw-transport": "^6.28.1", + "@ledgerhq/hw-transport": "^6.30.5", "@stacks/transactions": "^4.1.0", "varuint-bitcoin": "^1.1.2" }, diff --git a/ledger_app.toml b/ledger_app.toml index de2864f5..3e4cbb1f 100644 --- a/ledger_app.toml +++ b/ledger_app.toml @@ -1,7 +1,7 @@ [app] build_directory = "./app/" sdk = "C" -devices = ["nanos", "nanox", "nanos+"] +devices = ["nanos", "nanox", "nanos+", "stax"] [tests] unit_directory = "./tests/" diff --git a/tests/cpp/testvectors.cpp b/tests/cpp/testvectors.cpp deleted file mode 100644 index 1f2bb074..00000000 --- a/tests/cpp/testvectors.cpp +++ /dev/null @@ -1,115 +0,0 @@ -#pragma clang diagnostic push -#pragma ide diagnostic ignored "cert-err58-cpp" -/******************************************************************************* -* (c) 2019 Zondax GmbH -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ - -#include -#include "utils/testcases.h" - -#include -#include -#include "parser.h" -#include "utils/common.h" - -GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(VerifyTestVectors); - -using ::testing::TestWithParam; -using ::testing::Values; - -uint32_t hdPath[HDPATH_LEN_DEFAULT]; - -void check_testcase(const testcase_t &testcase) { - auto tc = ReadTestCaseData(testcase.testcases, testcase.index); - - parser_context_t ctx; - parser_error_t err; - - // Define mainnet or testnet through derivation path - hdPath[0] = HDPATH_0_DEFAULT; - hdPath[1] = HDPATH_1_DEFAULT; - if (tc.testnet) { - hdPath[0] = HDPATH_0_TESTNET; - hdPath[1] = HDPATH_1_TESTNET; - } - - err = parser_parse(&ctx, tc.blob.data(), tc.blob.size()); - if (tc.valid) { - ASSERT_EQ(err, parser_ok) << parser_getErrorDescription(err); - } else { - ASSERT_NE(err, parser_ok) << parser_getErrorDescription(err); - return; - } - - err = parser_validate(&ctx); - if (tc.valid) { - EXPECT_EQ(err, parser_ok) << parser_getErrorDescription(err); - } else { - EXPECT_NE(err, parser_ok) << parser_getErrorDescription(err); - return; - } - - auto output = dumpUI(&ctx, 40, 40); - - std::cout << std::endl; - for (const auto &i : output) { - std::cout << i << std::endl; - } - - std::cout << " EXPECTED ============" << std::endl; - for (const auto &i : tc.expected_ui_output) { - std::cout << i << std::endl; - } - - EXPECT_EQ(output.size(), tc.expected_ui_output.size()); - for (size_t i = 0; i < tc.expected_ui_output.size(); i++) { - if (i < output.size()) { - EXPECT_THAT(output[i], testing::Eq(tc.expected_ui_output[i])); - } - } -} - -/////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////// - -class VerifyTestVectors : public ::testing::TestWithParam { -public: - struct PrintToStringParamName { - template - std::string operator()(const testing::TestParamInfo &info) const { - auto p = static_cast(info.param); - std::stringstream ss; - ss << std::setfill('0') << std::setw(5) << p.index << "_" << p.description; - return ss.str(); - } - }; -}; - -INSTANTIATE_TEST_SUITE_P( - KnownIssues, - VerifyTestVectors, - ::testing::ValuesIn(GetJsonTestCases("testvectors/issues.json")), VerifyTestVectors::PrintToStringParamName() -); - -INSTANTIATE_TEST_SUITE_P( - Multisig, - VerifyTestVectors, - ::testing::ValuesIn(GetJsonTestCases("testvectors/manual.json")), VerifyTestVectors::PrintToStringParamName() -); - -TEST_P(VerifyTestVectors, CheckUIOutput_Manual) { check_testcase(GetParam()); } - -#pragma clang diagnostic pop diff --git a/tests/cpp/utils/common.cpp b/tests/cpp/utils/common.cpp deleted file mode 100644 index 80ac3e03..00000000 --- a/tests/cpp/utils/common.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* -* (c) 2019 Zondax GmbH -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ -#include -#include -#include -#include "common.h" - -std::vector dumpUI(parser_context_t *ctx, - uint16_t maxKeyLen, - uint16_t maxValueLen) { - uint8_t numItems; - parser_error_t err = parser_getNumItems(ctx, &numItems); - - auto answer = std::vector(); - - for (uint16_t idx = 0; idx < numItems; idx++) { - char keyBuffer[1000]; - char valueBuffer[1000]; - uint8_t pageIdx = 0; - uint8_t pageCount = 1; - - while (pageIdx < pageCount) { - std::stringstream ss; - - auto err = parser_getItem(ctx, - idx, - keyBuffer, maxKeyLen, - valueBuffer, maxValueLen, - pageIdx, &pageCount); - - ss << idx << " | " << keyBuffer << " : "; - - if (err == parser_ok) { - ss << valueBuffer; - } else { - ss << parser_getErrorDescription(err); - } - - answer.push_back(ss.str()); - - pageIdx++; - } - } - - return answer; -} diff --git a/tests/cpp/utils/common.h b/tests/cpp/utils/common.h deleted file mode 100644 index fb630604..00000000 --- a/tests/cpp/utils/common.h +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* -* (c) 2019 Zondax GmbH -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ - -#pragma once - -#include -#include - -#define EXPECT_EQ_STR(_STR1, _STR2, _ERROR_MESSAGE) { if (_STR1 != nullptr & _STR2 != nullptr) \ -EXPECT_TRUE(!strcmp(_STR1, _STR2)) << _ERROR_MESSAGE << ", expected: " << _STR2 << ", received: " << _STR1; \ -else FAIL() << "One of the strings is null"; } - -std::vector dumpUI(parser_context_t *ctx, uint16_t maxKeyLen, uint16_t maxValueLen); diff --git a/tests/cpp/utils/expected_output.cpp b/tests/cpp/utils/expected_output.cpp deleted file mode 100644 index b5c5b2cc..00000000 --- a/tests/cpp/utils/expected_output.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* -* (c) 2019 Zondax GmbH -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ -#include -#include -#include "testcases.h" -#include "zxmacros.h" - -bool TestcaseIsValid(const Json::Value &tc) { - return true; -} - -template -void addTo(std::vector &answer, const S &format_str, Args &&... args) { - answer.push_back(fmt::format(format_str, args...)); -} - -std::vector GenerateExpectedUIOutput(const testcaseData_t &tcd) { - auto answer = std::vector(); - - return answer; -} diff --git a/tests/cpp/utils/expected_output.h b/tests/cpp/utils/expected_output.h deleted file mode 100644 index 45dd7ee6..00000000 --- a/tests/cpp/utils/expected_output.h +++ /dev/null @@ -1,22 +0,0 @@ -/******************************************************************************* -* (c) 2019 Zondax GmbH -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ -#pragma once -#include -#include -#include -#include "types.h" - -std::vector GenerateExpectedUIOutput(const testcaseData_t &tcd); diff --git a/tests/cpp/utils/testcases.cpp b/tests/cpp/utils/testcases.cpp deleted file mode 100644 index d2a7592f..00000000 --- a/tests/cpp/utils/testcases.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* -* (c) 2019 Zondax GmbH -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ -#include "testcases.h" -#include "expected_output.h" -#include -#include -#include -#include - -testcaseData_t ReadRawTestCase(const std::shared_ptr &jsonSource, int index) { - testcaseData_t answer; - - return answer; -} - -testcaseData_t ReadTestCaseData(const std::shared_ptr &jsonSource, int index) { - testcaseData_t tcd = ReadRawTestCase(jsonSource, index); - - // Anotate with expected ui output - tcd.expected_ui_output = GenerateExpectedUIOutput(tcd); - return tcd; -} - -std::vector GetJsonTestCases(const std::string &filename) { - auto answer = std::vector(); - - Json::CharReaderBuilder builder; - std::shared_ptr obj(new Json::Value()); - - std::ifstream inFile(filename); - EXPECT_TRUE(inFile.is_open()) - << "\n" - << "******************\n" - << "Failed to open : " << filename << std::endl - << "Check that your working directory points to the tests directory\n" - << "In CLion use $PROJECT_DIR$\\tests\n" - << "******************\n"; - if (!inFile.is_open()) { return answer; } - - // Retrieve all test cases - JSONCPP_STRING errs; - Json::parseFromStream(builder, inFile, obj.get(), &errs); - std::cout << "Number of testcases: " << obj->size() << std::endl; - answer.reserve(obj->size()); - - for (int i = 0; i < obj->size(); i++) { - auto v = (*obj)[i]; - - auto description = std::string(""); - - description = v["description"].asString(); - description.erase(remove_if(description.begin(), description.end(), [](char v) -> bool { - return v == ':' || v == ' ' || v == '/'; - }), description.end()); - - answer.push_back(testcase_t{obj, i, description}); - } - - return answer; -} diff --git a/tests/cpp/utils/testcases.h b/tests/cpp/utils/testcases.h deleted file mode 100644 index a22fca96..00000000 --- a/tests/cpp/utils/testcases.h +++ /dev/null @@ -1,23 +0,0 @@ -/******************************************************************************* -* (c) 2019 Zondax GmbH -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ -#pragma once -#include -#include -#include "types.h" - -testcaseData_t ReadTestCaseData(const std::shared_ptr& jsonSource, int index); - -std::vector GetJsonTestCases(const std::string& filename); diff --git a/tests/cpp/utils/types.h b/tests/cpp/utils/types.h deleted file mode 100644 index e892b10c..00000000 --- a/tests/cpp/utils/types.h +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* -* (c) 2019 Zondax GmbH -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ -#pragma once - -typedef struct { -// TODO: Add respective fields - - std::string encoded_tx; - bool valid; - bool testnet; - - std::vector blob; - std::vector expected_ui_output; -} testcaseData_t; - -typedef struct { - std::shared_ptr testcases; - int64_t index; - std::string description; -} testcase_t; diff --git a/tests/testvectors/issues.json b/tests/testvectors/issues.json deleted file mode 100644 index 0d4f101c..00000000 --- a/tests/testvectors/issues.json +++ /dev/null @@ -1,2 +0,0 @@ -[ -] diff --git a/tests/testvectors/manual.json b/tests/testvectors/manual.json deleted file mode 100644 index 0d4f101c..00000000 --- a/tests/testvectors/manual.json +++ /dev/null @@ -1,2 +0,0 @@ -[ -] diff --git a/tests_zemu/jest.config.js b/tests_zemu/jest.config.js index 6dda8c75..aff4b227 100644 --- a/tests_zemu/jest.config.js +++ b/tests_zemu/jest.config.js @@ -2,7 +2,8 @@ module.exports = { preset: 'ts-jest', testEnvironment: 'node', transformIgnorePatterns: ['^.+\\.js$'], - globalSetup: "./jest/globalsetup.ts", - globalTeardown: "./jest/globalteardown.ts", - setupFilesAfterEnv: ["./jest/setup.ts"] + globalSetup: './jest/globalsetup.ts', + globalTeardown: './jest/globalteardown.ts', + setupFilesAfterEnv: ['./jest/setup.ts'], + reporters: ['default', ['summary', { summaryThreshold: 1 }]], } diff --git a/tests_zemu/package.json b/tests_zemu/package.json index 7f1b943a..e2b50d58 100644 --- a/tests_zemu/package.json +++ b/tests_zemu/package.json @@ -6,9 +6,10 @@ "description": "", "main": "index.js", "scripts": { - "clean": "ts-node tests/pullImageKillOld.ts", - "test": "yarn clean && jest --maxConcurrency 2", - "try": "node try.mjs" + "test": "jest --testPathIgnorePatterns='dev.*|testvectors.*|btc.*'", + "test_dev": "jest", + "try": "node try.mjs", + "debug": "node debug/debug.mjs debug" }, "repository": { "type": "git", @@ -20,14 +21,15 @@ ], "dependencies": { "@zondax/ledger-stacks": "link:../js", - "@zondax/zemu": "^0.42.1" + "@zondax/zemu": "=0.49.0" }, "devDependencies": { - "@ledgerhq/hw-transport-node-hid": "^6.27.2", + "@ledgerhq/hw-transport-node-hid": "^6.29.0", + "@matteoh2o1999/github-actions-jest-reporter": "^2.0.0", "@stacks/network": "^2.0.1", "@stacks/transactions": "^2.0.1", - "@types/jest": "^29.2.1", - "@types/ledgerhq__hw-transport": "^4.21.4", + "@types/jest": "^29.4.0", + "@types/ledgerhq__hw-transport": "^4.21.8", "@types/secp256k1": "^4.0.3", "@typescript-eslint/eslint-plugin": "^5.42.0", "@typescript-eslint/parser": "^5.42.0", @@ -39,13 +41,14 @@ "eslint-plugin-import": "^2.24.2", "eslint-plugin-jest": "^27.2.1", "eslint-plugin-prettier": "^4.2.1", - "jest": "29.5.0", + "jest": "^29.5.0", + "jest-serial-runner": "^1.2.0", "js-sha256": "0.9.0", "js-sha512": "^0.8.0", "noble-secp256k1": "^1.2.9", "prettier": "^2.3.2", "secp256k1": "^4.0.2", - "ts-jest": "^29.0.3", + "ts-jest": "^29.0.5", "ts-node": "^10.9.1", "typescript": "^5.0.4", "varuint-bitcoin": "^1.1.2" diff --git a/tests_zemu/snapshots/s-mainmenu/00004.png b/tests_zemu/snapshots/s-mainmenu/00004.png index 805a4b78..c1279209 100644 Binary files a/tests_zemu/snapshots/s-mainmenu/00004.png and b/tests_zemu/snapshots/s-mainmenu/00004.png differ diff --git a/tests_zemu/snapshots/s-mainmenu/00010.png b/tests_zemu/snapshots/s-mainmenu/00010.png index 805a4b78..c1279209 100644 Binary files a/tests_zemu/snapshots/s-mainmenu/00010.png and b/tests_zemu/snapshots/s-mainmenu/00010.png differ diff --git a/tests_zemu/snapshots/sp-call_with_string_args/00001.png b/tests_zemu/snapshots/sp-call_with_string_args/00001.png index 00e5ad3d..f8c60d92 100644 Binary files a/tests_zemu/snapshots/sp-call_with_string_args/00001.png and b/tests_zemu/snapshots/sp-call_with_string_args/00001.png differ diff --git a/tests_zemu/snapshots/sp-call_with_string_args/00003.png b/tests_zemu/snapshots/sp-call_with_string_args/00003.png index c62efd0f..3007712e 100644 Binary files a/tests_zemu/snapshots/sp-call_with_string_args/00003.png and b/tests_zemu/snapshots/sp-call_with_string_args/00003.png differ diff --git a/tests_zemu/snapshots/sp-call_with_string_args/00004.png b/tests_zemu/snapshots/sp-call_with_string_args/00004.png index 068f0273..bdd52883 100644 Binary files a/tests_zemu/snapshots/sp-call_with_string_args/00004.png and b/tests_zemu/snapshots/sp-call_with_string_args/00004.png differ diff --git a/tests_zemu/snapshots/sp-call_with_string_args/00005.png b/tests_zemu/snapshots/sp-call_with_string_args/00005.png index 3a7cde21..c0c44d6d 100644 Binary files a/tests_zemu/snapshots/sp-call_with_string_args/00005.png and b/tests_zemu/snapshots/sp-call_with_string_args/00005.png differ diff --git a/tests_zemu/snapshots/sp-call_with_string_args/00007.png b/tests_zemu/snapshots/sp-call_with_string_args/00007.png index bfe7ccea..819ef3a1 100644 Binary files a/tests_zemu/snapshots/sp-call_with_string_args/00007.png and b/tests_zemu/snapshots/sp-call_with_string_args/00007.png differ diff --git a/tests_zemu/snapshots/sp-call_with_string_args/00008.png b/tests_zemu/snapshots/sp-call_with_string_args/00008.png index 038153cb..dec4b6b6 100644 Binary files a/tests_zemu/snapshots/sp-call_with_string_args/00008.png and b/tests_zemu/snapshots/sp-call_with_string_args/00008.png differ diff --git a/tests_zemu/snapshots/sp-call_with_string_args/00010.png b/tests_zemu/snapshots/sp-call_with_string_args/00010.png index ab7bd77d..16218860 100644 Binary files a/tests_zemu/snapshots/sp-call_with_string_args/00010.png and b/tests_zemu/snapshots/sp-call_with_string_args/00010.png differ diff --git a/tests_zemu/snapshots/sp-call_with_string_args/00011.png b/tests_zemu/snapshots/sp-call_with_string_args/00011.png index bd80d3e6..39e3795d 100644 Binary files a/tests_zemu/snapshots/sp-call_with_string_args/00011.png and b/tests_zemu/snapshots/sp-call_with_string_args/00011.png differ diff --git a/tests_zemu/snapshots/sp-call_with_string_args/00013.png b/tests_zemu/snapshots/sp-call_with_string_args/00013.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-call_with_string_args/00013.png and b/tests_zemu/snapshots/sp-call_with_string_args/00013.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00000.png b/tests_zemu/snapshots/sp-mainmenu/00000.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00000.png and b/tests_zemu/snapshots/sp-mainmenu/00000.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00001.png b/tests_zemu/snapshots/sp-mainmenu/00001.png index e10e0049..8472e5d9 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00001.png and b/tests_zemu/snapshots/sp-mainmenu/00001.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00002.png b/tests_zemu/snapshots/sp-mainmenu/00002.png index 7e236da6..f7921677 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00002.png and b/tests_zemu/snapshots/sp-mainmenu/00002.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00003.png b/tests_zemu/snapshots/sp-mainmenu/00003.png index e10e0049..8472e5d9 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00003.png and b/tests_zemu/snapshots/sp-mainmenu/00003.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00004.png b/tests_zemu/snapshots/sp-mainmenu/00004.png index c30363d4..a9f8decc 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00004.png and b/tests_zemu/snapshots/sp-mainmenu/00004.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00010.png b/tests_zemu/snapshots/sp-mainmenu/00010.png index c30363d4..a9f8decc 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00010.png and b/tests_zemu/snapshots/sp-mainmenu/00010.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00011.png b/tests_zemu/snapshots/sp-mainmenu/00011.png index e10e0049..8472e5d9 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00011.png and b/tests_zemu/snapshots/sp-mainmenu/00011.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00012.png b/tests_zemu/snapshots/sp-mainmenu/00012.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00012.png and b/tests_zemu/snapshots/sp-mainmenu/00012.png differ diff --git a/tests_zemu/snapshots/sp-multisigTest/00001.png b/tests_zemu/snapshots/sp-multisigTest/00001.png index c75597d2..78fad643 100644 Binary files a/tests_zemu/snapshots/sp-multisigTest/00001.png and b/tests_zemu/snapshots/sp-multisigTest/00001.png differ diff --git a/tests_zemu/snapshots/sp-multisigTest/00003.png b/tests_zemu/snapshots/sp-multisigTest/00003.png index 6c71ae4b..af21c79e 100644 Binary files a/tests_zemu/snapshots/sp-multisigTest/00003.png and b/tests_zemu/snapshots/sp-multisigTest/00003.png differ diff --git a/tests_zemu/snapshots/sp-multisigTest/00004.png b/tests_zemu/snapshots/sp-multisigTest/00004.png index 1db3376f..cb039206 100644 Binary files a/tests_zemu/snapshots/sp-multisigTest/00004.png and b/tests_zemu/snapshots/sp-multisigTest/00004.png differ diff --git a/tests_zemu/snapshots/sp-multisigTest/00005.png b/tests_zemu/snapshots/sp-multisigTest/00005.png index 3018bdb2..0f977d73 100644 Binary files a/tests_zemu/snapshots/sp-multisigTest/00005.png and b/tests_zemu/snapshots/sp-multisigTest/00005.png differ diff --git a/tests_zemu/snapshots/sp-multisigTest/00006.png b/tests_zemu/snapshots/sp-multisigTest/00006.png index 2ab89714..139fd549 100644 Binary files a/tests_zemu/snapshots/sp-multisigTest/00006.png and b/tests_zemu/snapshots/sp-multisigTest/00006.png differ diff --git a/tests_zemu/snapshots/sp-multisigTest/00008.png b/tests_zemu/snapshots/sp-multisigTest/00008.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-multisigTest/00008.png and b/tests_zemu/snapshots/sp-multisigTest/00008.png differ diff --git a/tests_zemu/snapshots/sp-order_independent_multisigTest/00001.png b/tests_zemu/snapshots/sp-order_independent_multisigTest/00001.png index c75597d2..78fad643 100644 Binary files a/tests_zemu/snapshots/sp-order_independent_multisigTest/00001.png and b/tests_zemu/snapshots/sp-order_independent_multisigTest/00001.png differ diff --git a/tests_zemu/snapshots/sp-order_independent_multisigTest/00003.png b/tests_zemu/snapshots/sp-order_independent_multisigTest/00003.png index 6c71ae4b..af21c79e 100644 Binary files a/tests_zemu/snapshots/sp-order_independent_multisigTest/00003.png and b/tests_zemu/snapshots/sp-order_independent_multisigTest/00003.png differ diff --git a/tests_zemu/snapshots/sp-order_independent_multisigTest/00004.png b/tests_zemu/snapshots/sp-order_independent_multisigTest/00004.png index 1db3376f..cb039206 100644 Binary files a/tests_zemu/snapshots/sp-order_independent_multisigTest/00004.png and b/tests_zemu/snapshots/sp-order_independent_multisigTest/00004.png differ diff --git a/tests_zemu/snapshots/sp-order_independent_multisigTest/00005.png b/tests_zemu/snapshots/sp-order_independent_multisigTest/00005.png index 3018bdb2..0f977d73 100644 Binary files a/tests_zemu/snapshots/sp-order_independent_multisigTest/00005.png and b/tests_zemu/snapshots/sp-order_independent_multisigTest/00005.png differ diff --git a/tests_zemu/snapshots/sp-order_independent_multisigTest/00006.png b/tests_zemu/snapshots/sp-order_independent_multisigTest/00006.png index 2ab89714..139fd549 100644 Binary files a/tests_zemu/snapshots/sp-order_independent_multisigTest/00006.png and b/tests_zemu/snapshots/sp-order_independent_multisigTest/00006.png differ diff --git a/tests_zemu/snapshots/sp-order_independent_multisigTest/00008.png b/tests_zemu/snapshots/sp-order_independent_multisigTest/00008.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-order_independent_multisigTest/00008.png and b/tests_zemu/snapshots/sp-order_independent_multisigTest/00008.png differ diff --git a/tests_zemu/snapshots/sp-show_address/00001.png b/tests_zemu/snapshots/sp-show_address/00001.png index a4aa07cb..5076b71f 100644 Binary files a/tests_zemu/snapshots/sp-show_address/00001.png and b/tests_zemu/snapshots/sp-show_address/00001.png differ diff --git a/tests_zemu/snapshots/sp-show_address/00003.png b/tests_zemu/snapshots/sp-show_address/00003.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-show_address/00003.png and b/tests_zemu/snapshots/sp-show_address/00003.png differ diff --git a/tests_zemu/snapshots/sp-sign-structured_data_big_list_tuple/00007.png b/tests_zemu/snapshots/sp-sign-structured_data_big_list_tuple/00007.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-sign-structured_data_big_list_tuple/00007.png and b/tests_zemu/snapshots/sp-sign-structured_data_big_list_tuple/00007.png differ diff --git a/tests_zemu/snapshots/sp-sign-structured_data_big_tuple/00007.png b/tests_zemu/snapshots/sp-sign-structured_data_big_tuple/00007.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-sign-structured_data_big_tuple/00007.png and b/tests_zemu/snapshots/sp-sign-structured_data_big_tuple/00007.png differ diff --git a/tests_zemu/snapshots/sp-sign-structured_data_empty_list/00007.png b/tests_zemu/snapshots/sp-sign-structured_data_empty_list/00007.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-sign-structured_data_empty_list/00007.png and b/tests_zemu/snapshots/sp-sign-structured_data_empty_list/00007.png differ diff --git a/tests_zemu/snapshots/sp-sign-structured_data_simple_number/00007.png b/tests_zemu/snapshots/sp-sign-structured_data_simple_number/00007.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-sign-structured_data_simple_number/00007.png and b/tests_zemu/snapshots/sp-sign-structured_data_simple_number/00007.png differ diff --git a/tests_zemu/snapshots/sp-sign-structured_data_some_tuple/00007.png b/tests_zemu/snapshots/sp-sign-structured_data_some_tuple/00007.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-sign-structured_data_some_tuple/00007.png and b/tests_zemu/snapshots/sp-sign-structured_data_some_tuple/00007.png differ diff --git a/tests_zemu/snapshots/sp-sign-structured_data_string/00007.png b/tests_zemu/snapshots/sp-sign-structured_data_string/00007.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-sign-structured_data_string/00007.png and b/tests_zemu/snapshots/sp-sign-structured_data_string/00007.png differ diff --git a/tests_zemu/snapshots/sp-sign-structured_data_tuple/00007.png b/tests_zemu/snapshots/sp-sign-structured_data_tuple/00007.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-sign-structured_data_tuple/00007.png and b/tests_zemu/snapshots/sp-sign-structured_data_tuple/00007.png differ diff --git a/tests_zemu/snapshots/sp-sign/00001.png b/tests_zemu/snapshots/sp-sign/00001.png index 00e5ad3d..f8c60d92 100644 Binary files a/tests_zemu/snapshots/sp-sign/00001.png and b/tests_zemu/snapshots/sp-sign/00001.png differ diff --git a/tests_zemu/snapshots/sp-sign/00003.png b/tests_zemu/snapshots/sp-sign/00003.png index b326b071..59058fff 100644 Binary files a/tests_zemu/snapshots/sp-sign/00003.png and b/tests_zemu/snapshots/sp-sign/00003.png differ diff --git a/tests_zemu/snapshots/sp-sign/00004.png b/tests_zemu/snapshots/sp-sign/00004.png index 7c3682cd..ccc05b32 100644 Binary files a/tests_zemu/snapshots/sp-sign/00004.png and b/tests_zemu/snapshots/sp-sign/00004.png differ diff --git a/tests_zemu/snapshots/sp-sign/00005.png b/tests_zemu/snapshots/sp-sign/00005.png index 5a288b1f..9009baa5 100644 Binary files a/tests_zemu/snapshots/sp-sign/00005.png and b/tests_zemu/snapshots/sp-sign/00005.png differ diff --git a/tests_zemu/snapshots/sp-sign/00008.png b/tests_zemu/snapshots/sp-sign/00008.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-sign/00008.png and b/tests_zemu/snapshots/sp-sign/00008.png differ diff --git a/tests_zemu/snapshots/sp-sign_jwt/00001.png b/tests_zemu/snapshots/sp-sign_jwt/00001.png index 6ad82c0e..ec843f5e 100644 Binary files a/tests_zemu/snapshots/sp-sign_jwt/00001.png and b/tests_zemu/snapshots/sp-sign_jwt/00001.png differ diff --git a/tests_zemu/snapshots/sp-sign_jwt/00002.png b/tests_zemu/snapshots/sp-sign_jwt/00002.png index f0d7b2f2..abca02ad 100644 Binary files a/tests_zemu/snapshots/sp-sign_jwt/00002.png and b/tests_zemu/snapshots/sp-sign_jwt/00002.png differ diff --git a/tests_zemu/snapshots/sp-sign_jwt/00004.png b/tests_zemu/snapshots/sp-sign_jwt/00004.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-sign_jwt/00004.png and b/tests_zemu/snapshots/sp-sign_jwt/00004.png differ diff --git a/tests_zemu/snapshots/sp-sign_message/00001.png b/tests_zemu/snapshots/sp-sign_message/00001.png index 3173b4d7..67204131 100644 Binary files a/tests_zemu/snapshots/sp-sign_message/00001.png and b/tests_zemu/snapshots/sp-sign_message/00001.png differ diff --git a/tests_zemu/snapshots/sp-sign_message/00002.png b/tests_zemu/snapshots/sp-sign_message/00002.png index 58787c13..3b9ebfde 100644 Binary files a/tests_zemu/snapshots/sp-sign_message/00002.png and b/tests_zemu/snapshots/sp-sign_message/00002.png differ diff --git a/tests_zemu/snapshots/sp-sign_message/00003.png b/tests_zemu/snapshots/sp-sign_message/00003.png index 04a77fe9..812a7625 100644 Binary files a/tests_zemu/snapshots/sp-sign_message/00003.png and b/tests_zemu/snapshots/sp-sign_message/00003.png differ diff --git a/tests_zemu/snapshots/sp-sign_message/00004.png b/tests_zemu/snapshots/sp-sign_message/00004.png index 72fa1c8e..27c631c5 100644 Binary files a/tests_zemu/snapshots/sp-sign_message/00004.png and b/tests_zemu/snapshots/sp-sign_message/00004.png differ diff --git a/tests_zemu/snapshots/sp-sign_message/00005.png b/tests_zemu/snapshots/sp-sign_message/00005.png index c048f7ec..87d0f6dc 100644 Binary files a/tests_zemu/snapshots/sp-sign_message/00005.png and b/tests_zemu/snapshots/sp-sign_message/00005.png differ diff --git a/tests_zemu/snapshots/sp-sign_message/00006.png b/tests_zemu/snapshots/sp-sign_message/00006.png index 36f057ab..8a1f1ae8 100644 Binary files a/tests_zemu/snapshots/sp-sign_message/00006.png and b/tests_zemu/snapshots/sp-sign_message/00006.png differ diff --git a/tests_zemu/snapshots/sp-sign_message/00008.png b/tests_zemu/snapshots/sp-sign_message/00008.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-sign_message/00008.png and b/tests_zemu/snapshots/sp-sign_message/00008.png differ diff --git a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00001.png b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00001.png index 00e5ad3d..f8c60d92 100644 Binary files a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00001.png and b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00001.png differ diff --git a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00003.png b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00003.png index c62efd0f..3007712e 100644 Binary files a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00003.png and b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00003.png differ diff --git a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00004.png b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00004.png index 068f0273..bdd52883 100644 Binary files a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00004.png and b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00004.png differ diff --git a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00005.png b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00005.png index 3a7cde21..c0c44d6d 100644 Binary files a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00005.png and b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00005.png differ diff --git a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00007.png b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00007.png index 469af52d..ce221aa5 100644 Binary files a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00007.png and b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00007.png differ diff --git a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00008.png b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00008.png index 283af1e9..1f95cf22 100644 Binary files a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00008.png and b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00008.png differ diff --git a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00010.png b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00010.png index f7f5e13c..a4e72581 100644 Binary files a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00010.png and b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00010.png differ diff --git a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00014.png b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00014.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00014.png and b/tests_zemu/snapshots/sp-sign_standard_contract_call_tx/00014.png differ diff --git a/tests_zemu/snapshots/st-call_with_string_args/00000.png b/tests_zemu/snapshots/st-call_with_string_args/00000.png new file mode 100644 index 00000000..68b354b6 Binary files /dev/null and b/tests_zemu/snapshots/st-call_with_string_args/00000.png differ diff --git a/tests_zemu/snapshots/st-call_with_string_args/00001.png b/tests_zemu/snapshots/st-call_with_string_args/00001.png new file mode 100644 index 00000000..b7641875 Binary files /dev/null and b/tests_zemu/snapshots/st-call_with_string_args/00001.png differ diff --git a/tests_zemu/snapshots/st-call_with_string_args/00002.png b/tests_zemu/snapshots/st-call_with_string_args/00002.png new file mode 100644 index 00000000..505c15e0 Binary files /dev/null and b/tests_zemu/snapshots/st-call_with_string_args/00002.png differ diff --git a/tests_zemu/snapshots/st-call_with_string_args/00003.png b/tests_zemu/snapshots/st-call_with_string_args/00003.png new file mode 100644 index 00000000..ed81b200 Binary files /dev/null and b/tests_zemu/snapshots/st-call_with_string_args/00003.png differ diff --git a/tests_zemu/snapshots/st-call_with_string_args/00004.png b/tests_zemu/snapshots/st-call_with_string_args/00004.png new file mode 100644 index 00000000..41b051cc Binary files /dev/null and b/tests_zemu/snapshots/st-call_with_string_args/00004.png differ diff --git a/tests_zemu/snapshots/st-call_with_string_args/00005.png b/tests_zemu/snapshots/st-call_with_string_args/00005.png new file mode 100644 index 00000000..8c9edac0 Binary files /dev/null and b/tests_zemu/snapshots/st-call_with_string_args/00005.png differ diff --git a/tests_zemu/snapshots/st-call_with_string_args/00006.png b/tests_zemu/snapshots/st-call_with_string_args/00006.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-call_with_string_args/00006.png differ diff --git a/tests_zemu/snapshots/st-mainmenu/00000.png b/tests_zemu/snapshots/st-mainmenu/00000.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-mainmenu/00000.png differ diff --git a/tests_zemu/snapshots/st-mainmenu/00001.png b/tests_zemu/snapshots/st-mainmenu/00001.png new file mode 100644 index 00000000..37a92d75 Binary files /dev/null and b/tests_zemu/snapshots/st-mainmenu/00001.png differ diff --git a/tests_zemu/snapshots/st-mainmenu/00002.png b/tests_zemu/snapshots/st-mainmenu/00002.png new file mode 100644 index 00000000..6055937c Binary files /dev/null and b/tests_zemu/snapshots/st-mainmenu/00002.png differ diff --git a/tests_zemu/snapshots/st-mainmenu/00003.png b/tests_zemu/snapshots/st-mainmenu/00003.png new file mode 100644 index 00000000..60b55777 Binary files /dev/null and b/tests_zemu/snapshots/st-mainmenu/00003.png differ diff --git a/tests_zemu/snapshots/st-mainmenu/00004.png b/tests_zemu/snapshots/st-mainmenu/00004.png new file mode 100644 index 00000000..6055937c Binary files /dev/null and b/tests_zemu/snapshots/st-mainmenu/00004.png differ diff --git a/tests_zemu/snapshots/st-mainmenu/00005.png b/tests_zemu/snapshots/st-mainmenu/00005.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-mainmenu/00005.png differ diff --git a/tests_zemu/snapshots/st-multisigTest/00000.png b/tests_zemu/snapshots/st-multisigTest/00000.png new file mode 100644 index 00000000..68b354b6 Binary files /dev/null and b/tests_zemu/snapshots/st-multisigTest/00000.png differ diff --git a/tests_zemu/snapshots/st-multisigTest/00001.png b/tests_zemu/snapshots/st-multisigTest/00001.png new file mode 100644 index 00000000..751ab778 Binary files /dev/null and b/tests_zemu/snapshots/st-multisigTest/00001.png differ diff --git a/tests_zemu/snapshots/st-multisigTest/00002.png b/tests_zemu/snapshots/st-multisigTest/00002.png new file mode 100644 index 00000000..5b9c1323 Binary files /dev/null and b/tests_zemu/snapshots/st-multisigTest/00002.png differ diff --git a/tests_zemu/snapshots/st-multisigTest/00003.png b/tests_zemu/snapshots/st-multisigTest/00003.png new file mode 100644 index 00000000..cc5b54ee Binary files /dev/null and b/tests_zemu/snapshots/st-multisigTest/00003.png differ diff --git a/tests_zemu/snapshots/st-multisigTest/00004.png b/tests_zemu/snapshots/st-multisigTest/00004.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-multisigTest/00004.png differ diff --git a/tests_zemu/snapshots/st-order_independent_multisigTest/00000.png b/tests_zemu/snapshots/st-order_independent_multisigTest/00000.png new file mode 100644 index 00000000..68b354b6 Binary files /dev/null and b/tests_zemu/snapshots/st-order_independent_multisigTest/00000.png differ diff --git a/tests_zemu/snapshots/st-order_independent_multisigTest/00001.png b/tests_zemu/snapshots/st-order_independent_multisigTest/00001.png new file mode 100644 index 00000000..751ab778 Binary files /dev/null and b/tests_zemu/snapshots/st-order_independent_multisigTest/00001.png differ diff --git a/tests_zemu/snapshots/st-order_independent_multisigTest/00002.png b/tests_zemu/snapshots/st-order_independent_multisigTest/00002.png new file mode 100644 index 00000000..5b9c1323 Binary files /dev/null and b/tests_zemu/snapshots/st-order_independent_multisigTest/00002.png differ diff --git a/tests_zemu/snapshots/st-order_independent_multisigTest/00003.png b/tests_zemu/snapshots/st-order_independent_multisigTest/00003.png new file mode 100644 index 00000000..cc5b54ee Binary files /dev/null and b/tests_zemu/snapshots/st-order_independent_multisigTest/00003.png differ diff --git a/tests_zemu/snapshots/st-order_independent_multisigTest/00004.png b/tests_zemu/snapshots/st-order_independent_multisigTest/00004.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-order_independent_multisigTest/00004.png differ diff --git a/tests_zemu/snapshots/st-show_address/00000.png b/tests_zemu/snapshots/st-show_address/00000.png new file mode 100644 index 00000000..b3eecdfe Binary files /dev/null and b/tests_zemu/snapshots/st-show_address/00000.png differ diff --git a/tests_zemu/snapshots/st-show_address/00001.png b/tests_zemu/snapshots/st-show_address/00001.png new file mode 100644 index 00000000..35bf2abb Binary files /dev/null and b/tests_zemu/snapshots/st-show_address/00001.png differ diff --git a/tests_zemu/snapshots/st-show_address/00002.png b/tests_zemu/snapshots/st-show_address/00002.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-show_address/00002.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00000.png b/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00000.png new file mode 100644 index 00000000..68b354b6 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00000.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00001.png b/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00001.png new file mode 100644 index 00000000..dab82e44 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00001.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00002.png b/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00002.png new file mode 100644 index 00000000..95eade83 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00002.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00003.png b/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00003.png new file mode 100644 index 00000000..cc5b54ee Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00003.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00004.png b/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00004.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_big_list_tuple/00004.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00000.png b/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00000.png new file mode 100644 index 00000000..68b354b6 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00000.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00001.png b/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00001.png new file mode 100644 index 00000000..dab82e44 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00001.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00002.png b/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00002.png new file mode 100644 index 00000000..207606ac Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00002.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00003.png b/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00003.png new file mode 100644 index 00000000..cc5b54ee Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00003.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00004.png b/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00004.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_big_tuple/00004.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_empty_list/00000.png b/tests_zemu/snapshots/st-sign-structured_data_empty_list/00000.png new file mode 100644 index 00000000..68b354b6 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_empty_list/00000.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_empty_list/00001.png b/tests_zemu/snapshots/st-sign-structured_data_empty_list/00001.png new file mode 100644 index 00000000..dab82e44 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_empty_list/00001.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_empty_list/00002.png b/tests_zemu/snapshots/st-sign-structured_data_empty_list/00002.png new file mode 100644 index 00000000..ebfb26f2 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_empty_list/00002.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_empty_list/00003.png b/tests_zemu/snapshots/st-sign-structured_data_empty_list/00003.png new file mode 100644 index 00000000..cc5b54ee Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_empty_list/00003.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_empty_list/00004.png b/tests_zemu/snapshots/st-sign-structured_data_empty_list/00004.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_empty_list/00004.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_simple_number/00000.png b/tests_zemu/snapshots/st-sign-structured_data_simple_number/00000.png new file mode 100644 index 00000000..68b354b6 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_simple_number/00000.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_simple_number/00001.png b/tests_zemu/snapshots/st-sign-structured_data_simple_number/00001.png new file mode 100644 index 00000000..dab82e44 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_simple_number/00001.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_simple_number/00002.png b/tests_zemu/snapshots/st-sign-structured_data_simple_number/00002.png new file mode 100644 index 00000000..6043a74f Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_simple_number/00002.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_simple_number/00003.png b/tests_zemu/snapshots/st-sign-structured_data_simple_number/00003.png new file mode 100644 index 00000000..cc5b54ee Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_simple_number/00003.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_simple_number/00004.png b/tests_zemu/snapshots/st-sign-structured_data_simple_number/00004.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_simple_number/00004.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00000.png b/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00000.png new file mode 100644 index 00000000..68b354b6 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00000.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00001.png b/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00001.png new file mode 100644 index 00000000..dab82e44 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00001.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00002.png b/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00002.png new file mode 100644 index 00000000..76aebf65 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00002.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00003.png b/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00003.png new file mode 100644 index 00000000..cc5b54ee Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00003.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00004.png b/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00004.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_some_tuple/00004.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_string/00000.png b/tests_zemu/snapshots/st-sign-structured_data_string/00000.png new file mode 100644 index 00000000..68b354b6 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_string/00000.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_string/00001.png b/tests_zemu/snapshots/st-sign-structured_data_string/00001.png new file mode 100644 index 00000000..dab82e44 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_string/00001.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_string/00002.png b/tests_zemu/snapshots/st-sign-structured_data_string/00002.png new file mode 100644 index 00000000..32e4d6e0 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_string/00002.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_string/00003.png b/tests_zemu/snapshots/st-sign-structured_data_string/00003.png new file mode 100644 index 00000000..cc5b54ee Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_string/00003.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_string/00004.png b/tests_zemu/snapshots/st-sign-structured_data_string/00004.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_string/00004.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_tuple/00000.png b/tests_zemu/snapshots/st-sign-structured_data_tuple/00000.png new file mode 100644 index 00000000..68b354b6 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_tuple/00000.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_tuple/00001.png b/tests_zemu/snapshots/st-sign-structured_data_tuple/00001.png new file mode 100644 index 00000000..dab82e44 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_tuple/00001.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_tuple/00002.png b/tests_zemu/snapshots/st-sign-structured_data_tuple/00002.png new file mode 100644 index 00000000..595f1fdb Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_tuple/00002.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_tuple/00003.png b/tests_zemu/snapshots/st-sign-structured_data_tuple/00003.png new file mode 100644 index 00000000..cc5b54ee Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_tuple/00003.png differ diff --git a/tests_zemu/snapshots/st-sign-structured_data_tuple/00004.png b/tests_zemu/snapshots/st-sign-structured_data_tuple/00004.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-sign-structured_data_tuple/00004.png differ diff --git a/tests_zemu/snapshots/st-sign/00000.png b/tests_zemu/snapshots/st-sign/00000.png new file mode 100644 index 00000000..68b354b6 Binary files /dev/null and b/tests_zemu/snapshots/st-sign/00000.png differ diff --git a/tests_zemu/snapshots/st-sign/00001.png b/tests_zemu/snapshots/st-sign/00001.png new file mode 100644 index 00000000..513b0ff3 Binary files /dev/null and b/tests_zemu/snapshots/st-sign/00001.png differ diff --git a/tests_zemu/snapshots/st-sign/00002.png b/tests_zemu/snapshots/st-sign/00002.png new file mode 100644 index 00000000..16f04b36 Binary files /dev/null and b/tests_zemu/snapshots/st-sign/00002.png differ diff --git a/tests_zemu/snapshots/st-sign/00003.png b/tests_zemu/snapshots/st-sign/00003.png new file mode 100644 index 00000000..cc5b54ee Binary files /dev/null and b/tests_zemu/snapshots/st-sign/00003.png differ diff --git a/tests_zemu/snapshots/st-sign/00004.png b/tests_zemu/snapshots/st-sign/00004.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-sign/00004.png differ diff --git a/tests_zemu/snapshots/st-sign_jwt/00000.png b/tests_zemu/snapshots/st-sign_jwt/00000.png new file mode 100644 index 00000000..68b354b6 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_jwt/00000.png differ diff --git a/tests_zemu/snapshots/st-sign_jwt/00001.png b/tests_zemu/snapshots/st-sign_jwt/00001.png new file mode 100644 index 00000000..e155d320 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_jwt/00001.png differ diff --git a/tests_zemu/snapshots/st-sign_jwt/00002.png b/tests_zemu/snapshots/st-sign_jwt/00002.png new file mode 100644 index 00000000..3e1829fc Binary files /dev/null and b/tests_zemu/snapshots/st-sign_jwt/00002.png differ diff --git a/tests_zemu/snapshots/st-sign_jwt/00003.png b/tests_zemu/snapshots/st-sign_jwt/00003.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_jwt/00003.png differ diff --git a/tests_zemu/snapshots/st-sign_message/00000.png b/tests_zemu/snapshots/st-sign_message/00000.png new file mode 100644 index 00000000..68b354b6 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_message/00000.png differ diff --git a/tests_zemu/snapshots/st-sign_message/00001.png b/tests_zemu/snapshots/st-sign_message/00001.png new file mode 100644 index 00000000..c9ffc0e0 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_message/00001.png differ diff --git a/tests_zemu/snapshots/st-sign_message/00002.png b/tests_zemu/snapshots/st-sign_message/00002.png new file mode 100644 index 00000000..ee27136d Binary files /dev/null and b/tests_zemu/snapshots/st-sign_message/00002.png differ diff --git a/tests_zemu/snapshots/st-sign_message/00003.png b/tests_zemu/snapshots/st-sign_message/00003.png new file mode 100644 index 00000000..cc5b54ee Binary files /dev/null and b/tests_zemu/snapshots/st-sign_message/00003.png differ diff --git a/tests_zemu/snapshots/st-sign_message/00004.png b/tests_zemu/snapshots/st-sign_message/00004.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_message/00004.png differ diff --git a/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00000.png b/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00000.png new file mode 100644 index 00000000..68b354b6 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00000.png differ diff --git a/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00001.png b/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00001.png new file mode 100644 index 00000000..b7641875 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00001.png differ diff --git a/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00002.png b/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00002.png new file mode 100644 index 00000000..40afd4c1 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00002.png differ diff --git a/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00003.png b/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00003.png new file mode 100644 index 00000000..2f08f1a0 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00003.png differ diff --git a/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00004.png b/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00004.png new file mode 100644 index 00000000..da8628f5 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00004.png differ diff --git a/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00005.png b/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00005.png new file mode 100644 index 00000000..8c9edac0 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00005.png differ diff --git a/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00006.png b/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00006.png new file mode 100644 index 00000000..274e6398 Binary files /dev/null and b/tests_zemu/snapshots/st-sign_standard_contract_call_tx/00006.png differ diff --git a/tests_zemu/snapshots/x-call_with_string_args/00001.png b/tests_zemu/snapshots/x-call_with_string_args/00001.png index 00e5ad3d..f8c60d92 100644 Binary files a/tests_zemu/snapshots/x-call_with_string_args/00001.png and b/tests_zemu/snapshots/x-call_with_string_args/00001.png differ diff --git a/tests_zemu/snapshots/x-call_with_string_args/00003.png b/tests_zemu/snapshots/x-call_with_string_args/00003.png index c62efd0f..3007712e 100644 Binary files a/tests_zemu/snapshots/x-call_with_string_args/00003.png and b/tests_zemu/snapshots/x-call_with_string_args/00003.png differ diff --git a/tests_zemu/snapshots/x-call_with_string_args/00004.png b/tests_zemu/snapshots/x-call_with_string_args/00004.png index 068f0273..bdd52883 100644 Binary files a/tests_zemu/snapshots/x-call_with_string_args/00004.png and b/tests_zemu/snapshots/x-call_with_string_args/00004.png differ diff --git a/tests_zemu/snapshots/x-call_with_string_args/00005.png b/tests_zemu/snapshots/x-call_with_string_args/00005.png index 3a7cde21..c0c44d6d 100644 Binary files a/tests_zemu/snapshots/x-call_with_string_args/00005.png and b/tests_zemu/snapshots/x-call_with_string_args/00005.png differ diff --git a/tests_zemu/snapshots/x-call_with_string_args/00007.png b/tests_zemu/snapshots/x-call_with_string_args/00007.png index bfe7ccea..819ef3a1 100644 Binary files a/tests_zemu/snapshots/x-call_with_string_args/00007.png and b/tests_zemu/snapshots/x-call_with_string_args/00007.png differ diff --git a/tests_zemu/snapshots/x-call_with_string_args/00008.png b/tests_zemu/snapshots/x-call_with_string_args/00008.png index 038153cb..dec4b6b6 100644 Binary files a/tests_zemu/snapshots/x-call_with_string_args/00008.png and b/tests_zemu/snapshots/x-call_with_string_args/00008.png differ diff --git a/tests_zemu/snapshots/x-call_with_string_args/00010.png b/tests_zemu/snapshots/x-call_with_string_args/00010.png index ab7bd77d..16218860 100644 Binary files a/tests_zemu/snapshots/x-call_with_string_args/00010.png and b/tests_zemu/snapshots/x-call_with_string_args/00010.png differ diff --git a/tests_zemu/snapshots/x-call_with_string_args/00011.png b/tests_zemu/snapshots/x-call_with_string_args/00011.png index bd80d3e6..39e3795d 100644 Binary files a/tests_zemu/snapshots/x-call_with_string_args/00011.png and b/tests_zemu/snapshots/x-call_with_string_args/00011.png differ diff --git a/tests_zemu/snapshots/x-call_with_string_args/00013.png b/tests_zemu/snapshots/x-call_with_string_args/00013.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-call_with_string_args/00013.png and b/tests_zemu/snapshots/x-call_with_string_args/00013.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00000.png b/tests_zemu/snapshots/x-mainmenu/00000.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00000.png and b/tests_zemu/snapshots/x-mainmenu/00000.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00001.png b/tests_zemu/snapshots/x-mainmenu/00001.png index e10e0049..8472e5d9 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00001.png and b/tests_zemu/snapshots/x-mainmenu/00001.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00002.png b/tests_zemu/snapshots/x-mainmenu/00002.png index 7e236da6..f7921677 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00002.png and b/tests_zemu/snapshots/x-mainmenu/00002.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00003.png b/tests_zemu/snapshots/x-mainmenu/00003.png index e10e0049..8472e5d9 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00003.png and b/tests_zemu/snapshots/x-mainmenu/00003.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00004.png b/tests_zemu/snapshots/x-mainmenu/00004.png index c30363d4..a9f8decc 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00004.png and b/tests_zemu/snapshots/x-mainmenu/00004.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00010.png b/tests_zemu/snapshots/x-mainmenu/00010.png index c30363d4..a9f8decc 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00010.png and b/tests_zemu/snapshots/x-mainmenu/00010.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00011.png b/tests_zemu/snapshots/x-mainmenu/00011.png index e10e0049..8472e5d9 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00011.png and b/tests_zemu/snapshots/x-mainmenu/00011.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00012.png b/tests_zemu/snapshots/x-mainmenu/00012.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00012.png and b/tests_zemu/snapshots/x-mainmenu/00012.png differ diff --git a/tests_zemu/snapshots/x-multisigTest/00001.png b/tests_zemu/snapshots/x-multisigTest/00001.png index c75597d2..78fad643 100644 Binary files a/tests_zemu/snapshots/x-multisigTest/00001.png and b/tests_zemu/snapshots/x-multisigTest/00001.png differ diff --git a/tests_zemu/snapshots/x-multisigTest/00003.png b/tests_zemu/snapshots/x-multisigTest/00003.png index 6c71ae4b..af21c79e 100644 Binary files a/tests_zemu/snapshots/x-multisigTest/00003.png and b/tests_zemu/snapshots/x-multisigTest/00003.png differ diff --git a/tests_zemu/snapshots/x-multisigTest/00004.png b/tests_zemu/snapshots/x-multisigTest/00004.png index 1db3376f..cb039206 100644 Binary files a/tests_zemu/snapshots/x-multisigTest/00004.png and b/tests_zemu/snapshots/x-multisigTest/00004.png differ diff --git a/tests_zemu/snapshots/x-multisigTest/00005.png b/tests_zemu/snapshots/x-multisigTest/00005.png index 3018bdb2..0f977d73 100644 Binary files a/tests_zemu/snapshots/x-multisigTest/00005.png and b/tests_zemu/snapshots/x-multisigTest/00005.png differ diff --git a/tests_zemu/snapshots/x-multisigTest/00006.png b/tests_zemu/snapshots/x-multisigTest/00006.png index 2ab89714..139fd549 100644 Binary files a/tests_zemu/snapshots/x-multisigTest/00006.png and b/tests_zemu/snapshots/x-multisigTest/00006.png differ diff --git a/tests_zemu/snapshots/x-multisigTest/00008.png b/tests_zemu/snapshots/x-multisigTest/00008.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-multisigTest/00008.png and b/tests_zemu/snapshots/x-multisigTest/00008.png differ diff --git a/tests_zemu/snapshots/x-order_independent_multisigTest/00001.png b/tests_zemu/snapshots/x-order_independent_multisigTest/00001.png index c75597d2..78fad643 100644 Binary files a/tests_zemu/snapshots/x-order_independent_multisigTest/00001.png and b/tests_zemu/snapshots/x-order_independent_multisigTest/00001.png differ diff --git a/tests_zemu/snapshots/x-order_independent_multisigTest/00003.png b/tests_zemu/snapshots/x-order_independent_multisigTest/00003.png index 6c71ae4b..af21c79e 100644 Binary files a/tests_zemu/snapshots/x-order_independent_multisigTest/00003.png and b/tests_zemu/snapshots/x-order_independent_multisigTest/00003.png differ diff --git a/tests_zemu/snapshots/x-order_independent_multisigTest/00004.png b/tests_zemu/snapshots/x-order_independent_multisigTest/00004.png index 1db3376f..cb039206 100644 Binary files a/tests_zemu/snapshots/x-order_independent_multisigTest/00004.png and b/tests_zemu/snapshots/x-order_independent_multisigTest/00004.png differ diff --git a/tests_zemu/snapshots/x-order_independent_multisigTest/00005.png b/tests_zemu/snapshots/x-order_independent_multisigTest/00005.png index 3018bdb2..0f977d73 100644 Binary files a/tests_zemu/snapshots/x-order_independent_multisigTest/00005.png and b/tests_zemu/snapshots/x-order_independent_multisigTest/00005.png differ diff --git a/tests_zemu/snapshots/x-order_independent_multisigTest/00006.png b/tests_zemu/snapshots/x-order_independent_multisigTest/00006.png index 2ab89714..139fd549 100644 Binary files a/tests_zemu/snapshots/x-order_independent_multisigTest/00006.png and b/tests_zemu/snapshots/x-order_independent_multisigTest/00006.png differ diff --git a/tests_zemu/snapshots/x-order_independent_multisigTest/00008.png b/tests_zemu/snapshots/x-order_independent_multisigTest/00008.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-order_independent_multisigTest/00008.png and b/tests_zemu/snapshots/x-order_independent_multisigTest/00008.png differ diff --git a/tests_zemu/snapshots/x-show_address/00001.png b/tests_zemu/snapshots/x-show_address/00001.png index a4aa07cb..5076b71f 100644 Binary files a/tests_zemu/snapshots/x-show_address/00001.png and b/tests_zemu/snapshots/x-show_address/00001.png differ diff --git a/tests_zemu/snapshots/x-show_address/00003.png b/tests_zemu/snapshots/x-show_address/00003.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-show_address/00003.png and b/tests_zemu/snapshots/x-show_address/00003.png differ diff --git a/tests_zemu/snapshots/x-sign-structured_data_big_list_tuple/00007.png b/tests_zemu/snapshots/x-sign-structured_data_big_list_tuple/00007.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-sign-structured_data_big_list_tuple/00007.png and b/tests_zemu/snapshots/x-sign-structured_data_big_list_tuple/00007.png differ diff --git a/tests_zemu/snapshots/x-sign-structured_data_big_tuple/00007.png b/tests_zemu/snapshots/x-sign-structured_data_big_tuple/00007.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-sign-structured_data_big_tuple/00007.png and b/tests_zemu/snapshots/x-sign-structured_data_big_tuple/00007.png differ diff --git a/tests_zemu/snapshots/x-sign-structured_data_empty_list/00007.png b/tests_zemu/snapshots/x-sign-structured_data_empty_list/00007.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-sign-structured_data_empty_list/00007.png and b/tests_zemu/snapshots/x-sign-structured_data_empty_list/00007.png differ diff --git a/tests_zemu/snapshots/x-sign-structured_data_simple_number/00007.png b/tests_zemu/snapshots/x-sign-structured_data_simple_number/00007.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-sign-structured_data_simple_number/00007.png and b/tests_zemu/snapshots/x-sign-structured_data_simple_number/00007.png differ diff --git a/tests_zemu/snapshots/x-sign-structured_data_some_tuple/00007.png b/tests_zemu/snapshots/x-sign-structured_data_some_tuple/00007.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-sign-structured_data_some_tuple/00007.png and b/tests_zemu/snapshots/x-sign-structured_data_some_tuple/00007.png differ diff --git a/tests_zemu/snapshots/x-sign-structured_data_string/00007.png b/tests_zemu/snapshots/x-sign-structured_data_string/00007.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-sign-structured_data_string/00007.png and b/tests_zemu/snapshots/x-sign-structured_data_string/00007.png differ diff --git a/tests_zemu/snapshots/x-sign-structured_data_tuple/00007.png b/tests_zemu/snapshots/x-sign-structured_data_tuple/00007.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-sign-structured_data_tuple/00007.png and b/tests_zemu/snapshots/x-sign-structured_data_tuple/00007.png differ diff --git a/tests_zemu/snapshots/x-sign/00001.png b/tests_zemu/snapshots/x-sign/00001.png index 00e5ad3d..f8c60d92 100644 Binary files a/tests_zemu/snapshots/x-sign/00001.png and b/tests_zemu/snapshots/x-sign/00001.png differ diff --git a/tests_zemu/snapshots/x-sign/00003.png b/tests_zemu/snapshots/x-sign/00003.png index b326b071..59058fff 100644 Binary files a/tests_zemu/snapshots/x-sign/00003.png and b/tests_zemu/snapshots/x-sign/00003.png differ diff --git a/tests_zemu/snapshots/x-sign/00004.png b/tests_zemu/snapshots/x-sign/00004.png index 7c3682cd..ccc05b32 100644 Binary files a/tests_zemu/snapshots/x-sign/00004.png and b/tests_zemu/snapshots/x-sign/00004.png differ diff --git a/tests_zemu/snapshots/x-sign/00005.png b/tests_zemu/snapshots/x-sign/00005.png index 5a288b1f..9009baa5 100644 Binary files a/tests_zemu/snapshots/x-sign/00005.png and b/tests_zemu/snapshots/x-sign/00005.png differ diff --git a/tests_zemu/snapshots/x-sign/00008.png b/tests_zemu/snapshots/x-sign/00008.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-sign/00008.png and b/tests_zemu/snapshots/x-sign/00008.png differ diff --git a/tests_zemu/snapshots/x-sign_jwt/00001.png b/tests_zemu/snapshots/x-sign_jwt/00001.png index 6ad82c0e..ec843f5e 100644 Binary files a/tests_zemu/snapshots/x-sign_jwt/00001.png and b/tests_zemu/snapshots/x-sign_jwt/00001.png differ diff --git a/tests_zemu/snapshots/x-sign_jwt/00002.png b/tests_zemu/snapshots/x-sign_jwt/00002.png index f0d7b2f2..abca02ad 100644 Binary files a/tests_zemu/snapshots/x-sign_jwt/00002.png and b/tests_zemu/snapshots/x-sign_jwt/00002.png differ diff --git a/tests_zemu/snapshots/x-sign_jwt/00004.png b/tests_zemu/snapshots/x-sign_jwt/00004.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-sign_jwt/00004.png and b/tests_zemu/snapshots/x-sign_jwt/00004.png differ diff --git a/tests_zemu/snapshots/x-sign_message/00001.png b/tests_zemu/snapshots/x-sign_message/00001.png index 3173b4d7..67204131 100644 Binary files a/tests_zemu/snapshots/x-sign_message/00001.png and b/tests_zemu/snapshots/x-sign_message/00001.png differ diff --git a/tests_zemu/snapshots/x-sign_message/00002.png b/tests_zemu/snapshots/x-sign_message/00002.png index 58787c13..3b9ebfde 100644 Binary files a/tests_zemu/snapshots/x-sign_message/00002.png and b/tests_zemu/snapshots/x-sign_message/00002.png differ diff --git a/tests_zemu/snapshots/x-sign_message/00003.png b/tests_zemu/snapshots/x-sign_message/00003.png index 04a77fe9..812a7625 100644 Binary files a/tests_zemu/snapshots/x-sign_message/00003.png and b/tests_zemu/snapshots/x-sign_message/00003.png differ diff --git a/tests_zemu/snapshots/x-sign_message/00004.png b/tests_zemu/snapshots/x-sign_message/00004.png index 72fa1c8e..27c631c5 100644 Binary files a/tests_zemu/snapshots/x-sign_message/00004.png and b/tests_zemu/snapshots/x-sign_message/00004.png differ diff --git a/tests_zemu/snapshots/x-sign_message/00005.png b/tests_zemu/snapshots/x-sign_message/00005.png index c048f7ec..87d0f6dc 100644 Binary files a/tests_zemu/snapshots/x-sign_message/00005.png and b/tests_zemu/snapshots/x-sign_message/00005.png differ diff --git a/tests_zemu/snapshots/x-sign_message/00006.png b/tests_zemu/snapshots/x-sign_message/00006.png index 36f057ab..8a1f1ae8 100644 Binary files a/tests_zemu/snapshots/x-sign_message/00006.png and b/tests_zemu/snapshots/x-sign_message/00006.png differ diff --git a/tests_zemu/snapshots/x-sign_message/00008.png b/tests_zemu/snapshots/x-sign_message/00008.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-sign_message/00008.png and b/tests_zemu/snapshots/x-sign_message/00008.png differ diff --git a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00001.png b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00001.png index 00e5ad3d..f8c60d92 100644 Binary files a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00001.png and b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00001.png differ diff --git a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00003.png b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00003.png index c62efd0f..3007712e 100644 Binary files a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00003.png and b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00003.png differ diff --git a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00004.png b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00004.png index 068f0273..bdd52883 100644 Binary files a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00004.png and b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00004.png differ diff --git a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00005.png b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00005.png index 3a7cde21..c0c44d6d 100644 Binary files a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00005.png and b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00005.png differ diff --git a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00007.png b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00007.png index 469af52d..ce221aa5 100644 Binary files a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00007.png and b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00007.png differ diff --git a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00008.png b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00008.png index 283af1e9..1f95cf22 100644 Binary files a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00008.png and b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00008.png differ diff --git a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00010.png b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00010.png index f7f5e13c..a4e72581 100644 Binary files a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00010.png and b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00010.png differ diff --git a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00014.png b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00014.png index 129fca70..04254665 100644 Binary files a/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00014.png and b/tests_zemu/snapshots/x-sign_standard_contract_call_tx/00014.png differ diff --git a/tests_zemu/tests/common.ts b/tests_zemu/tests/common.ts index 9c09f363..af7d37c6 100644 --- a/tests_zemu/tests/common.ts +++ b/tests_zemu/tests/common.ts @@ -7,9 +7,11 @@ export const APP_SEED = 'equip will roof matter pink blind book anxiety banner e const APP_PATH_S = Resolve('../app/output/app_s.elf') const APP_PATH_X = Resolve('../app/output/app_x.elf') const APP_PATH_SP = Resolve('../app/output/app_s2.elf') +const APP_PATH_ST = Resolve('../app/output/app_stax.elf') export const models: IDeviceModel[] = [ { name: 'nanos', prefix: 'S', path: APP_PATH_S }, { name: 'nanox', prefix: 'X', path: APP_PATH_X }, { name: 'nanosp', prefix: 'SP', path: APP_PATH_SP }, + { name: 'stax', prefix: 'ST', path: APP_PATH_ST }, ] diff --git a/tests_zemu/tests/standard.test.ts b/tests_zemu/tests/standard.test.ts index a36414b3..1d33f6b4 100644 --- a/tests_zemu/tests/standard.test.ts +++ b/tests_zemu/tests/standard.test.ts @@ -118,6 +118,22 @@ describe('Standard', function () { } }) + test.concurrent.each(models)(`get address2`, async function (m) { + const sim = new Zemu(m.path) + try { + await sim.start({ ...defaultOptions, model: m.name }) + const app = new StacksApp(sim.getTransport()) + + // Verify that the app works for m/5757'/x/x/x/x + const response = await app.getAddressAndPubKey("m/5757'/0'/5'/0/0", AddressVersion.MainnetSingleSig) + console.log(response) + expect(response.returnCode).toEqual(0x9000) + + } finally { + await sim.close() + } + }) + test.concurrent.each(models)(`get identify publicKey`, async function (m) { const sim = new Zemu(m.path) try { diff --git a/tests_zemu/yarn.lock b/tests_zemu/yarn.lock new file mode 100644 index 00000000..1afcb09e --- /dev/null +++ b/tests_zemu/yarn.lock @@ -0,0 +1,5023 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@actions/core@^1.10.0": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.10.1.tgz#61108e7ac40acae95ee36da074fa5850ca4ced8a" + integrity sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g== + dependencies: + "@actions/http-client" "^2.0.1" + uuid "^8.3.2" + +"@actions/http-client@^2.0.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.1.tgz#ed3fe7a5a6d317ac1d39886b0bb999ded229bb38" + integrity sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw== + dependencies: + tunnel "^0.0.6" + undici "^5.25.4" + +"@ampproject/remapping@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/code-frame@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== + dependencies: + "@babel/highlight" "^7.24.7" + picocolors "^1.0.0" + +"@babel/compat-data@^7.20.5": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.0.tgz#c241dc454e5b5917e40d37e525e2f4530c399298" + integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== + +"@babel/compat-data@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.7.tgz#d23bbea508c3883ba8251fb4164982c36ea577ed" + integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.3.tgz#cf1c877284a469da5d1ce1d1e53665253fae712e" + integrity sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.21.3" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-module-transforms" "^7.21.2" + "@babel/helpers" "^7.21.0" + "@babel/parser" "^7.21.3" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.3" + "@babel/types" "^7.21.3" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + +"@babel/core@^7.23.9": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.7.tgz#b676450141e0b52a3d43bc91da86aa608f950ac4" + integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helpers" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/template" "^7.24.7" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.21.3", "@babel/generator@^7.7.2": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.3.tgz#232359d0874b392df04045d72ce2fd9bb5045fce" + integrity sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA== + dependencies: + "@babel/types" "^7.21.3" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.7.tgz#1654d01de20ad66b4b4d99c135471bc654c55e6d" + integrity sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA== + dependencies: + "@babel/types" "^7.24.7" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" + integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + +"@babel/helper-compilation-targets@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz#4eb6c4a80d6ffeac25ab8cd9a21b5dfa48d503a9" + integrity sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg== + dependencies: + "@babel/compat-data" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-environment-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" + integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== + dependencies: + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" + +"@babel/helper-function-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" + integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== + dependencies: + "@babel/template" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-hoist-variables@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" + integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" + integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-module-transforms@^7.21.2": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" + integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.2" + "@babel/types" "^7.21.2" + +"@babel/helper-module-transforms@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz#31b6c9a2930679498db65b685b1698bfd6c7daf8" + integrity sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ== + dependencies: + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== + +"@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== + dependencies: + "@babel/types" "^7.20.2" + +"@babel/helper-simple-access@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" + integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" + integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + +"@babel/helper-string-parser@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2" + integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== + +"@babel/helper-validator-option@^7.18.6": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" + integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== + +"@babel/helper-validator-option@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6" + integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw== + +"@babel/helpers@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" + integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== + dependencies: + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.0" + "@babel/types" "^7.21.0" + +"@babel/helpers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.7.tgz#aa2ccda29f62185acb5d42fb4a3a1b1082107416" + integrity sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg== + dependencies: + "@babel/template" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.3.tgz#1d285d67a19162ff9daa358d4cb41d50c06220b3" + integrity sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ== + +"@babel/parser@^7.23.9", "@babel/parser@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85" + integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" + integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/runtime@^7.12.5": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" + integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.20.7", "@babel/template@^7.3.3": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/template@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" + integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.3.tgz#4747c5e7903d224be71f90788b06798331896f67" + integrity sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.21.3" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.21.3" + "@babel/types" "^7.21.3" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5" + integrity sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.24.7" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-hoist-variables" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/types" "^7.24.7" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.3", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.3.tgz#4865a5357ce40f64e3400b0f3b737dc6d4f64d05" + integrity sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@babel/types@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2" + integrity sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q== + dependencies: + "@babel/helper-string-parser" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" + +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@eslint-community/eslint-utils@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz#a831e6e468b4b2b5ae42bf658bea015bf10bc518" + integrity sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.4.0.tgz#3e61c564fcd6b921cb789838631c5ee44df09403" + integrity sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ== + +"@eslint/eslintrc@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" + integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.5.2" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.42.0.tgz#484a1d638de2911e6f5a30c12f49c7e4a3270fb6" + integrity sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw== + +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + +"@grpc/grpc-js@^1.10.6": + version "1.10.10" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.10.10.tgz#476d315feeb9dbb0f2d6560008c92688c30f13e0" + integrity sha512-HPa/K5NX6ahMoeBv15njAc/sfF4/jmiXLar9UlC2UfHFKZzsCVLc3wbe7+7qua7w9VPh2/L6EBxyAV7/E8Wftg== + dependencies: + "@grpc/proto-loader" "^0.7.13" + "@js-sdsl/ordered-map" "^4.4.2" + +"@grpc/proto-loader@^0.7.12", "@grpc/proto-loader@^0.7.13": + version "0.7.13" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.13.tgz#f6a44b2b7c9f7b609f5748c6eac2d420e37670cf" + integrity sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw== + dependencies: + lodash.camelcase "^4.3.0" + long "^5.0.0" + protobufjs "^7.2.5" + yargs "^17.7.2" + +"@humanwhocodes/config-array@^0.11.10": + version "0.11.10" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + 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" + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036" + integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg== + dependencies: + jest-get-type "^29.4.3" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.4.3": + version "29.4.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" + integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== + dependencies: + "@sinclair/typebox" "^0.25.16" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" + integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== + dependencies: + "@jest/schemas" "^29.4.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@js-sdsl/ordered-map@^4.4.2": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c" + integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== + +"@ledgerhq/devices@^8.4.0": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-8.4.0.tgz#f3a03576d4a53d731bdaa212a00bd0adbfb86fb1" + integrity sha512-TUrMlWZJ+5AFp2lWMw4rGQoU+WtjIqlFX5SzQDL9phaUHrt4TFierAGHsaj5+tUHudhD4JhIaLI2cn1NOyq5NQ== + dependencies: + "@ledgerhq/errors" "^6.17.0" + "@ledgerhq/logs" "^6.12.0" + rxjs "^7.8.1" + semver "^7.3.5" + +"@ledgerhq/errors@^6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.17.0.tgz#0d56361fe6eb7de3b239e661710679f933f1fcca" + integrity sha512-xnOVpy/gUUkusEORdr2Qhw3Vd0MGfjyVGgkGR9Ck6FXE26OIdIQ3tNmG5BdZN+gwMMFJJVxxS4/hr0taQfZ43w== + +"@ledgerhq/hw-transport-http@^6.29.5": + version "6.30.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-http/-/hw-transport-http-6.30.0.tgz#87c109e6612f074d76abd9261a4fcc3d52217df1" + integrity sha512-OYni65DmgQenk7ZVsG3jFRjubRaYKGLMUwwyngsNOVEKUA69C8MVJjf+goHXY5d5JMUm34njPYV+5dv/khySHw== + dependencies: + "@ledgerhq/errors" "^6.17.0" + "@ledgerhq/hw-transport" "^6.31.0" + "@ledgerhq/logs" "^6.12.0" + axios "^0.26.1" + ws "^7.5.2" + +"@ledgerhq/hw-transport-node-hid-noevents@^6.30.0": + version "6.30.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.30.0.tgz#ff9df5fa1540fe75428c6f30a4f815617132093d" + integrity sha512-bKhhYF8SHBW0nh57xZMyHYCoZ3kkQnHZhlCpPJGRh3a6NDgb4wgKxVsvTzMxHAadZA357/3956/JFmddvdZqxQ== + dependencies: + "@ledgerhq/devices" "^8.4.0" + "@ledgerhq/errors" "^6.17.0" + "@ledgerhq/hw-transport" "^6.31.0" + "@ledgerhq/logs" "^6.12.0" + node-hid "^2.1.2" + +"@ledgerhq/hw-transport-node-hid@^6.29.0": + version "6.29.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-6.29.0.tgz#658b8a688289719d867f6cae2ff7a230385bc75a" + integrity sha512-YZn7EfGAvZPJb6en19iiOuli5Gk9PpnAY62EvFIcTxYqMLQX4K/ZCBDc9xhXfhwMZva1In64HK353Zyq+DU9CQ== + dependencies: + "@ledgerhq/devices" "^8.4.0" + "@ledgerhq/errors" "^6.17.0" + "@ledgerhq/hw-transport" "^6.31.0" + "@ledgerhq/hw-transport-node-hid-noevents" "^6.30.0" + "@ledgerhq/logs" "^6.12.0" + lodash "^4.17.21" + node-hid "^2.1.2" + usb "2.9.0" + +"@ledgerhq/hw-transport@^6.30.5", "@ledgerhq/hw-transport@^6.31.0": + version "6.31.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.31.0.tgz#82d8154bbcec8dc0104009a646159190fba5ae76" + integrity sha512-BY1poLk8vlJdIYngp8Zfaa/V9n14dqgt1G7iNetVRhJVFEKp9EYONeC3x6q/N7x81LUpzBk6M+T+s46Z4UiXHw== + dependencies: + "@ledgerhq/devices" "^8.4.0" + "@ledgerhq/errors" "^6.17.0" + "@ledgerhq/logs" "^6.12.0" + events "^3.3.0" + +"@ledgerhq/logs@^6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-6.12.0.tgz#ad903528bf3687a44da435d7b2479d724d374f5d" + integrity sha512-ExDoj1QV5eC6TEbMdLUMMk9cfvNKhhv5gXol4SmULRVCx/3iyCPhJ74nsb3S0Vb+/f+XujBEj3vQn5+cwS0fNA== + +"@matteoh2o1999/github-actions-jest-reporter@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@matteoh2o1999/github-actions-jest-reporter/-/github-actions-jest-reporter-2.0.0.tgz#f1fe9ed4780a03b77d373384652468e687180646" + integrity sha512-Ec2M2Ig0sCgQswCryTlv3WAXPFzDN6jSICgWfYiK1hSnzK3K9k31GE5zQIaL5BxUklukujS0tB5miN1I5VvklQ== + dependencies: + "@actions/core" "^1.10.0" + chalk "^4.0.0" + jest "^29.3.1" + +"@noble/hashes@^1.0.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/secp256k1@^1.5.5": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + +"@sinclair/typebox@^0.25.16": + version "0.25.24" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" + integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" + integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz#d10549ed1f423d80639c528b6c7f5a1017747d0c" + integrity sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw== + dependencies: + "@sinonjs/commons" "^2.0.0" + +"@stacks/common@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@stacks/common/-/common-1.2.2.tgz#1365ffb0f8bd9e4cd194c63c65a1bb2c83876ba1" + integrity sha512-knCqq88EBRCN8AhS7+Sx2PJuRv0EFNChEpqLqCAchCHCQfp5bWad/47Zw+fLP9ccBwFXh4pl1wDtbQLBfDo0+A== + dependencies: + cross-fetch "^3.0.6" + +"@stacks/common@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@stacks/common/-/common-2.0.2.tgz#ac9822b0afabdc9c1ae4a0aea77f97d943d197c9" + integrity sha512-RpuNIqf+XmcHlMjXeVZE4fS3yIUlCvOYmxyBKOarh010Kx3Gs/LhAeejn/329lYcIE6VwNPoeXPSE9deq7Yjcw== + dependencies: + "@types/node" "^14.14.43" + bn.js "^4.12.0" + buffer "^6.0.3" + cross-fetch "^3.1.4" + +"@stacks/common@^4.3.5": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@stacks/common/-/common-4.3.5.tgz#8115100f6d0bd29b66ddb2ce0e7e034ddee92115" + integrity sha512-UuViiQ7fn3vdtTe3739aRzbl+wbukekeQuXgqt8d7nB2HC2HodD7GcHhpUga165cO35CD6lQUtj3vXxJb5Ga+A== + dependencies: + "@types/bn.js" "^5.1.0" + "@types/node" "^18.0.4" + buffer "^6.0.3" + +"@stacks/network@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@stacks/network/-/network-1.2.2.tgz#30ca87ad6339f32eb04ed3a9dbcc2e39ed933604" + integrity sha512-xcWwuRrLJn9qqi3PEBcP2UPZHQztTZd31C0aVlzYHttNMir/sY9SrUqSnw45z2Jo4O9pIYYPIiPRtdV91Ho3fw== + dependencies: + "@stacks/common" "^1.2.2" + +"@stacks/network@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@stacks/network/-/network-2.0.2.tgz#a03dc34ff9fc7f8eaf7a2896d1412019c41b601f" + integrity sha512-DX6yFP8NgrxZ1bMwTbIoYzcCcjo979Mao1YsyClFr0Bv6JBF7+jh091A9hJ62jPLZDGbZA/PNWn6QGR+t3VY/w== + dependencies: + "@stacks/common" "^2.0.1" + +"@stacks/network@^4.3.5": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@stacks/network/-/network-4.3.5.tgz#9e902fa9fab24abce0c09dd91d6c165d617e63d8" + integrity sha512-TC4+AkuT6qi3MoEGxTftA+4BNp99QvGnI+qtKQkoA1m0KDr8b9hSBUhugJHRhQbWuo7D6q0+JagYEGxLID29Kw== + dependencies: + "@stacks/common" "^4.3.5" + cross-fetch "^3.1.5" + +"@stacks/transactions@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@stacks/transactions/-/transactions-2.0.1.tgz#6a9270d49f2b93067f678fe45474a1d72247d4c1" + integrity sha512-q+8nCbn+0m1T8NbGG2sfMcBcCxdaH/F+vgBEHkhMIFHFLYXVYBGYbTX2llGS9StLp/tQq6p2Bfb1kzKFSw8FRQ== + dependencies: + "@stacks/common" "^2.0.1" + "@stacks/network" "^1.2.2" + "@types/bn.js" "^4.11.6" + "@types/elliptic" "^6.4.12" + "@types/node" "^14.14.43" + "@types/randombytes" "^2.0.0" + "@types/sha.js" "^2.4.0" + bn.js "^4.12.0" + c32check "^1.1.2" + cross-fetch "^3.1.4" + elliptic "^6.5.4" + lodash "^4.17.20" + randombytes "^2.1.0" + ripemd160-min "^0.0.6" + sha.js "^2.4.11" + smart-buffer "^4.1.0" + +"@stacks/transactions@^4.1.0": + version "4.3.8" + resolved "https://registry.yarnpkg.com/@stacks/transactions/-/transactions-4.3.8.tgz#1a46d615be6b7d6deac6c392ad99e6f9cc6fcfa4" + integrity sha512-5xYYv2TdXXM9PVixB79Pr99symQ8fhbVATjempGUxtL23/XUiRiLvJZohDxIE4VQ2EzbB4g4j8Y7oqPjj0h09Q== + dependencies: + "@noble/hashes" "^1.0.0" + "@noble/secp256k1" "^1.5.5" + "@stacks/common" "^4.3.5" + "@stacks/network" "^4.3.5" + "@types/node" "^18.0.4" + "@types/sha.js" "^2.4.0" + c32check "^1.1.3" + lodash.clonedeep "^4.5.0" + ripemd160-min "^0.0.6" + sha.js "^2.4.11" + smart-buffer "^4.1.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/babel__core@^7.1.14": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" + integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.18.3" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" + integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== + dependencies: + "@babel/types" "^7.3.0" + +"@types/bn.js@*", "@types/bn.js@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" + integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== + dependencies: + "@types/node" "*" + +"@types/bn.js@^4.11.6": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/elliptic@^6.4.12": + version "6.4.14" + resolved "https://registry.yarnpkg.com/@types/elliptic/-/elliptic-6.4.14.tgz#7bbaad60567a588c1f08b10893453e6b9b4de48e" + integrity sha512-z4OBcDAU0GVwDTuwJzQCiL6188QvZMkvoERgcVjq0/mPM8jCfdwZ3x5zQEVoL9WCAru3aG5wl3Z5Ww5wBWn7ZQ== + dependencies: + "@types/bn.js" "*" + +"@types/graceful-fs@^4.1.3": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^29.4.0": + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/ledgerhq__hw-transport@^4.21.8": + version "4.21.8" + resolved "https://registry.yarnpkg.com/@types/ledgerhq__hw-transport/-/ledgerhq__hw-transport-4.21.8.tgz#973fedb76ade14307fe85db336373a5a5da54f79" + integrity sha512-uO2AJYZUVCwgyqgyy2/KW+JsQaO0hcwDdubRaHgF2ehO0ngGAY41PbE8qnPnmUw1uerMXONvL68QFioA7Y6C5g== + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@^18.0.4": + version "18.15.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.3.tgz#f0b991c32cfc6a4e7f3399d6cb4b8cf9a0315014" + integrity sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw== + +"@types/node@>=13.7.0": + version "20.14.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.9.tgz#12e8e765ab27f8c421a1820c99f5f313a933b420" + integrity sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg== + dependencies: + undici-types "~5.26.4" + +"@types/node@^14.14.43": + version "14.18.38" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.38.tgz#2169ca4b70aa59aa5a8923509e50619dde48b0cf" + integrity sha512-zMRIidN2Huikv/+/U7gRPFYsXDR/7IGqFZzTLnCEj5+gkrQjsowfamaxEnyvArct5hxGA3bTxMXlYhH78V6Cew== + +"@types/randombytes@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/randombytes/-/randombytes-2.0.0.tgz#0087ff5e60ae68023b9bc4398b406fea7ad18304" + integrity sha512-bz8PhAVlwN72vqefzxa14DKNT8jK/mV66CSjwdVQM/k3Th3EPKfUtdMniwZgMedQTFuywAsfjnZsg+pEnltaMA== + dependencies: + "@types/node" "*" + +"@types/secp256k1@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + dependencies: + "@types/node" "*" + +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@types/sha.js@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/sha.js/-/sha.js-2.4.0.tgz#bce682ef860b40f419d024fa08600c3b8d24bb01" + integrity sha512-amxKgPy6WJTKuw8mpUwjX2BSxuBtBmZfRwIUDIuPJKNwGN8CWDli8JTg5ONTWOtcTkHIstvT7oAhhYXqEjStHQ== + dependencies: + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/w3c-web-usb@^1.0.6": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz#cf89cccd2d93b6245e784c19afe0a9f5038d4528" + integrity sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ== + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.22" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" + integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^5.42.0": + version "5.55.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.55.0.tgz#bc2400c3a23305e8c9a9c04aa40933868aaaeb47" + integrity sha512-IZGc50rtbjk+xp5YQoJvmMPmJEYoC53SiKPXyqWfv15XoD2Y5Kju6zN0DwlmaGJp1Iw33JsWJcQ7nw0lGCGjVg== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.55.0" + "@typescript-eslint/type-utils" "5.55.0" + "@typescript-eslint/utils" "5.55.0" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.42.0": + version "5.55.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.55.0.tgz#8c96a0b6529708ace1dcfa60f5e6aec0f5ed2262" + integrity sha512-ppvmeF7hvdhUUZWSd2EEWfzcFkjJzgNQzVST22nzg958CR+sphy8A6K7LXQZd6V75m1VKjp+J4g/PCEfSCmzhw== + dependencies: + "@typescript-eslint/scope-manager" "5.55.0" + "@typescript-eslint/types" "5.55.0" + "@typescript-eslint/typescript-estree" "5.55.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.55.0": + version "5.55.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.55.0.tgz#e863bab4d4183ddce79967fe10ceb6c829791210" + integrity sha512-OK+cIO1ZGhJYNCL//a3ROpsd83psf4dUJ4j7pdNVzd5DmIk+ffkuUIX2vcZQbEW/IR41DYsfJTB19tpCboxQuw== + dependencies: + "@typescript-eslint/types" "5.55.0" + "@typescript-eslint/visitor-keys" "5.55.0" + +"@typescript-eslint/scope-manager@5.59.9": + version "5.59.9" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz#eadce1f2733389cdb58c49770192c0f95470d2f4" + integrity sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ== + dependencies: + "@typescript-eslint/types" "5.59.9" + "@typescript-eslint/visitor-keys" "5.59.9" + +"@typescript-eslint/type-utils@5.55.0": + version "5.55.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.55.0.tgz#74bf0233523f874738677bb73cb58094210e01e9" + integrity sha512-ObqxBgHIXj8rBNm0yh8oORFrICcJuZPZTqtAFh0oZQyr5DnAHZWfyw54RwpEEH+fD8suZaI0YxvWu5tYE/WswA== + dependencies: + "@typescript-eslint/typescript-estree" "5.55.0" + "@typescript-eslint/utils" "5.55.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.55.0": + version "5.55.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.55.0.tgz#9830f8d3bcbecf59d12f821e5bc6960baaed41fd" + integrity sha512-M4iRh4AG1ChrOL6Y+mETEKGeDnT7Sparn6fhZ5LtVJF1909D5O4uqK+C5NPbLmpfZ0XIIxCdwzKiijpZUOvOug== + +"@typescript-eslint/types@5.59.9": + version "5.59.9" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.9.tgz#3b4e7ae63718ce1b966e0ae620adc4099a6dcc52" + integrity sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw== + +"@typescript-eslint/typescript-estree@5.55.0": + version "5.55.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.55.0.tgz#8db7c8e47ecc03d49b05362b8db6f1345ee7b575" + integrity sha512-I7X4A9ovA8gdpWMpr7b1BN9eEbvlEtWhQvpxp/yogt48fy9Lj3iE3ild/1H3jKBBIYj5YYJmS2+9ystVhC7eaQ== + dependencies: + "@typescript-eslint/types" "5.55.0" + "@typescript-eslint/visitor-keys" "5.55.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/typescript-estree@5.59.9": + version "5.59.9" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz#6bfea844e468427b5e72034d33c9fffc9557392b" + integrity sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA== + dependencies: + "@typescript-eslint/types" "5.59.9" + "@typescript-eslint/visitor-keys" "5.59.9" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.55.0": + version "5.55.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.55.0.tgz#34e97322e7ae5b901e7a870aabb01dad90023341" + integrity sha512-FkW+i2pQKcpDC3AY6DU54yl8Lfl14FVGYDgBTyGKB75cCwV3KpkpTMFi9d9j2WAJ4271LR2HeC5SEWF/CZmmfw== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.55.0" + "@typescript-eslint/types" "5.55.0" + "@typescript-eslint/typescript-estree" "5.55.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/utils@^5.10.0": + version "5.59.9" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.9.tgz#adee890107b5ffe02cd46fdaa6c2125fb3c6c7c4" + integrity sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.59.9" + "@typescript-eslint/types" "5.59.9" + "@typescript-eslint/typescript-estree" "5.59.9" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.55.0": + version "5.55.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.55.0.tgz#01ad414fca8367706d76cdb94adf788dc5b664a2" + integrity sha512-q2dlHHwWgirKh1D3acnuApXG+VNXpEY5/AwRxDVuEQpxWaB0jCDe0jFMVMALJ3ebSfuOVE8/rMS+9ZOYGg1GWw== + dependencies: + "@typescript-eslint/types" "5.55.0" + eslint-visitor-keys "^3.3.0" + +"@typescript-eslint/visitor-keys@5.59.9": + version "5.59.9" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz#9f86ef8e95aca30fb5a705bb7430f95fc58b146d" + integrity sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q== + dependencies: + "@typescript-eslint/types" "5.59.9" + eslint-visitor-keys "^3.3.0" + +"@zondax/ledger-stacks@link:../js": + version "0.0.0" + uid "" + +"@zondax/zemu@=0.49.0": + version "0.49.0" + resolved "https://registry.yarnpkg.com/@zondax/zemu/-/zemu-0.49.0.tgz#bfd353a7a2b324b0c9cff86ae59cc334e9df1172" + integrity sha512-pauRxerKDEAO/sHso2mAz5Di+v3edRMbOHJjiB/XTfly9Mmy1Ygiq1MeWUq3S52xb1twPdDySiq8ggaDLZESZw== + dependencies: + "@grpc/grpc-js" "^1.10.6" + "@grpc/proto-loader" "^0.7.12" + "@ledgerhq/hw-transport-http" "^6.29.5" + axios "^1.6.8" + axios-retry "^4.1.0" + dockerode "^4.0.2" + elfy "^1.0.0" + fs-extra "^11.2.0" + get-port "^5.1.1" + pngjs "^7.0.0" + randomstring "^1.3.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1, acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@^3.0.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +asn1@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axios-retry@^4.1.0: + version "4.4.1" + resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-4.4.1.tgz#e5d0c851e635fd4de866aec2b9b422f05d661257" + integrity sha512-JGzNoglDHtHWIEvvAampB0P7jxQ/sT4COmW0FgSQkVg6o4KqNjNMBI6uFVOq517hkw/OAYYAG08ADtBlV8lvmQ== + dependencies: + is-retry-allowed "^2.2.0" + +axios@^0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9" + integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA== + dependencies: + follow-redirects "^1.14.8" + +axios@^1.6.8: + version "1.7.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" + integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + 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" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + 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" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.8: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypt-pbkdf@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bn.js@^4.11.9, bn.js@^4.12.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browserslist@^4.21.3: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +browserslist@^4.22.2: + version "4.23.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.1.tgz#ce4af0534b3d37db5c1a4ca98b9080f985041e96" + integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw== + dependencies: + caniuse-lite "^1.0.30001629" + electron-to-chromium "^1.4.796" + node-releases "^2.0.14" + update-browserslist-db "^1.0.16" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +buildcheck@~0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238" + integrity sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A== + +c32check@^1.1.2, c32check@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/c32check/-/c32check-1.1.3.tgz#232890e4d788afbd4e97e2611a3c251aa63e5977" + integrity sha512-ADADE/PjAbJRlwpG3ShaOMbBUlJJZO7xaYSRD5Tub6PixQlgR4s36y9cvMf/YRGpkqX+QOxIdMw216iC320q9A== + dependencies: + base-x "^3.0.8" + buffer "^5.6.0" + cross-sha256 "^1.2.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001449: + version "1.0.30001466" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz#c1e6197c540392e09709ecaa9e3e403428c53375" + integrity sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w== + +caniuse-lite@^1.0.30001629: + version "1.0.30001638" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001638.tgz#598e1f0c2ac36f37ebc3f5b8887a32ca558e5d56" + integrity sha512-5SuJUJ7cZnhPpeLHaH0c/HPAnAHZvS6ElWyHK9GSIbVOQABLzowiI2pjmpvZ1WEbkyz46iFd4UXlOHR5SqgfMQ== + +chalk@^2.0.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + 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" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +ci-info@^3.2.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cpu-features@~0.0.9: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.10.tgz#9aae536db2710c7254d7ed67cb3cbc7d29ad79c5" + integrity sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA== + dependencies: + buildcheck "~0.0.6" + nan "^2.19.0" + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-fetch@^3.0.6, cross-fetch@^3.1.4, cross-fetch@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-sha256@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/cross-sha256/-/cross-sha256-1.2.0.tgz#d7b941d17920a1781b8d2d03a1e55700c75b2082" + integrity sha512-KViLNMDZKV7jwFqjFx+rNhG26amnFYYQ0S+VaFlVvpk8tM+2XbFia/don/SjGHg9WQxnFVi6z64CGPuF3T+nNw== + dependencies: + buffer "^5.6.0" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-js@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" + integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^4.1.1, debug@^4.3.1: + version "4.3.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" + integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== + dependencies: + ms "2.1.2" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +dedent@^1.0.0: + version "1.5.3" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" + integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +detect-libc@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" + integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +docker-modem@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-5.0.3.tgz#50c06f11285289f58112b5c4c4d89824541c41d0" + integrity sha512-89zhop5YVhcPEt5FpUFGr3cDyceGhq/F9J+ZndQ4KfqNvfbJpPMfgeixFgUj5OjCYAboElqODxY5Z1EBsSa6sg== + dependencies: + debug "^4.1.1" + readable-stream "^3.5.0" + split-ca "^1.0.1" + ssh2 "^1.15.0" + +dockerode@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-4.0.2.tgz#dedc8529a1db3ac46d186f5912389899bc309f7d" + integrity sha512-9wM1BVpVMFr2Pw3eJNXrYYt6DT9k0xMcsSCjtPvyQ+xa1iPg/Mo3T/gUcwI0B2cczqCeCYRPF8yFYDwtFXT0+w== + dependencies: + "@balena/dockerignore" "^1.0.2" + docker-modem "^5.0.3" + tar-fs "~2.0.1" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +electron-to-chromium@^1.4.284: + version "1.4.330" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.330.tgz#4740378db7160d7210afb29800c74048cdf10a99" + integrity sha512-PqyefhybrVdjAJ45HaPLtuVaehiSw7C3ya0aad+rvmV53IVyXmYRk3pwIOb2TxTDTnmgQdn46NjMMaysx79/6Q== + +electron-to-chromium@^1.4.796: + version "1.4.812" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.812.tgz#21b78709c5a13af5d5c688d135a22dcea7617acf" + integrity sha512-7L8fC2Ey/b6SePDFKR2zHAy4mbdp1/38Yk5TsARO66W3hC5KEaeKMMHoxwtuH+jcu2AYLSn9QX04i95t6Fl1Hg== + +elfy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/elfy/-/elfy-1.0.0.tgz#7a1c86af7d41e0a568cbb4a3fa5b685648d9efcd" + integrity sha512-4Kp3AA94jC085IJox+qnvrZ3PudqTi4gQNvIoTZfJJ9IqkRuCoqP60vCVYlIg00c5aYusi5Wjh2bf0cHYt+6gQ== + dependencies: + endian-reader "^0.3.0" + +elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +endian-reader@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/endian-reader/-/endian-reader-0.3.0.tgz#84eca436b80aed0d0639c47291338b932efe50a0" + integrity sha512-zPlHN59VLEjeJtpEU41ti/i7ZvTbwclvUN2M8anCsI3tOC/3mq6WNTJEKi49A5eLGvDkA0975LZb67Xwp7u4xQ== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== + dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.0" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1, escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^8.3.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.7.0.tgz#f1cc58a8afebc50980bd53475451df146c13182d" + integrity sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA== + +eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== + dependencies: + debug "^3.2.7" + is-core-module "^2.11.0" + resolve "^1.22.1" + +eslint-module-utils@^2.7.4: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.24.2: + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" + has "^1.0.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-jest@^27.2.1: + version "27.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.2.1.tgz#b85b4adf41c682ea29f1f01c8b11ccc39b5c672c" + integrity sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg== + dependencies: + "@typescript-eslint/utils" "^5.10.0" + +eslint-plugin-prettier@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint-visitor-keys@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== + +eslint@^8.40.0: + version "8.42.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.42.0.tgz#7bebdc3a55f9ed7167251fe7259f75219cade291" + integrity sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.3" + "@eslint/js" "8.42.0" + "@humanwhocodes/config-array" "^0.11.10" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.0" + eslint-visitor-keys "^3.4.1" + espree "^9.5.2" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.5.2: + version "9.5.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" + integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + 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" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +expect@^29.0.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" + integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg== + dependencies: + "@jest/expect-utils" "^29.5.0" + jest-get-type "^29.4.3" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-util "^29.5.0" + +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + 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" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +follow-redirects@^1.14.8, follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-port@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + 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" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.11.0, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-retry-allowed@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" + integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + 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" + +istanbul-lib-instrument@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" + integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" + integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.4.3" + jest-get-type "^29.4.3" + pretty-format "^29.5.0" + +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-get-type@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" + integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" + integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw== + dependencies: + chalk "^4.0.0" + jest-diff "^29.5.0" + jest-get-type "^29.4.3" + pretty-format "^29.5.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" + integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.5.0" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.5.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-serial-runner@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/jest-serial-runner/-/jest-serial-runner-1.2.1.tgz#0f5f8dbe6f077119bd1fdd7e8518f92353c194d5" + integrity sha512-d59fF+7HdjNvQEL7B4WyFE+f8q5tGzlNUqtOnxTrT1ofun7O6/Lgm/j255BBgCY2fmSue/34M7Xy9+VWRByP0Q== + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + +jest-util@^29.0.0, jest-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" + integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== + dependencies: + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.3.1, jest@^29.5.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.7.0" + +js-sha256@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" + integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== + +js-sha512@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha512/-/js-sha512-0.8.0.tgz#dd22db8d02756faccf19f218e3ed61ec8249f7d4" + integrity sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +long@^5.0.0: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nan@^2.18.0, nan@^2.19.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.20.0.tgz#08c5ea813dd54ed16e5bd6505bf42af4f7838ca3" + integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw== + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +noble-secp256k1@^1.2.9: + version "1.2.14" + resolved "https://registry.yarnpkg.com/noble-secp256k1/-/noble-secp256k1-1.2.14.tgz#39429c941d51211ca40161569cee03e61d72599e" + integrity sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg== + +node-abi@^3.3.0: + version "3.33.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.33.0.tgz#8b23a0cec84e1c5f5411836de6a9b84bccf26e7f" + integrity sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog== + dependencies: + semver "^7.3.5" + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-addon-api@^3.0.2: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + +node-addon-api@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" + integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== + +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@^4.2.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" + integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== + +node-gyp-build@^4.5.0: + version "4.8.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.1.tgz#976d3ad905e71b76086f4f0b0d3637fe79b6cda5" + integrity sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw== + +node-hid@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-2.1.2.tgz#3145fa86ed4336a402a71e9f372c54213b88797c" + integrity sha512-qhCyQqrPpP93F/6Wc/xUR7L8mAJW0Z6R7HMQV8jCHHksAxNDe/4z4Un/H9CpLOT+5K39OPyt9tIQlavxWES3lg== + dependencies: + bindings "^1.5.0" + node-addon-api "^3.0.2" + prebuild-install "^7.1.1" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + 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" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + 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" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pngjs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-7.0.0.tgz#a8b7446020ebbc6ac739db6c5415a65d17090e26" + integrity sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow== + +prebuild-install@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" + integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.3.2: + version "2.8.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" + integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== + +pretty-format@^29.0.0, pretty-format@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" + integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== + dependencies: + "@jest/schemas" "^29.4.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +protobufjs@^7.2.5: + version "7.3.2" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.3.2.tgz#60f3b7624968868f6f739430cfbc8c9370e26df4" + integrity sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +pure-rand@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.1.tgz#31207dddd15d43f299fdcdb2f572df65030c19af" + integrity sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" + integrity sha512-lDVjxQQFoCG1jcrP06LNo2lbWp4QTShEXnhActFBwYuHprllQV6VUpwreApsYqCgD+N1mHoqJ/BI/4eV4R2GYg== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomstring@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/randomstring/-/randomstring-1.3.0.tgz#1bf9d730066899e70aee3285573f84708278683d" + integrity sha512-gY7aQ4i1BgwZ8I1Op4YseITAyiDiajeZOPQUbIq9TPGPhUm5FX59izIaOpmKbME1nmnEiABf28d9K2VSii6BBg== + dependencies: + randombytes "2.0.3" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.1.tgz#cee884cd4e3f355660e501fa3276b27d7ffe5a20" + integrity sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw== + +resolve@^1.20.0, resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160-min@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/ripemd160-min/-/ripemd160-min-0.0.6.tgz#a904b77658114474d02503e819dcc55853b67e62" + integrity sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +secp256k1@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== + +semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +sha.js@^2.4.11: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +smart-buffer@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +split-ca@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split-ca/-/split-ca-1.0.1.tgz#6c83aff3692fa61256e0cd197e05e9de157691a6" + integrity sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +ssh2@^1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.15.0.tgz#2f998455036a7f89e0df5847efb5421748d9871b" + integrity sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw== + dependencies: + asn1 "^0.2.6" + bcrypt-pbkdf "^1.0.2" + optionalDependencies: + cpu-features "~0.0.9" + nan "^2.18.0" + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-fs@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.1.tgz#e44086c1c60d31a4f0cf893b1c4e155dabfae9e2" + integrity sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.0.0" + +tar-stream@^2.0.0, tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-jest@^29.0.5: + version "29.1.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.5.tgz#d6c0471cc78bffa2cb4664a0a6741ef36cfe8f69" + integrity sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "4.x" + make-error "1.x" + semver "^7.5.3" + yargs-parser "^21.0.1" + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.14.1: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tunnel@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" + integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== + +tweetnacl@^0.14.3: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typescript@^5.0.4: + version "5.1.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826" + integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici@^5.25.4: + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== + dependencies: + "@fastify/busboy" "^2.0.0" + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +update-browserslist-db@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +update-browserslist-db@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" + integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== + dependencies: + escalade "^3.1.2" + picocolors "^1.0.1" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +usb@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/usb/-/usb-2.9.0.tgz#8ae3b175f93bee559400bff33491eee63406b6a2" + integrity sha512-G0I/fPgfHUzWH8xo2KkDxTTFruUWfppgSFJ+bQxz/kVY2x15EQ/XDB7dqD1G432G4gBG4jYQuF3U7j/orSs5nw== + dependencies: + "@types/w3c-web-usb" "^1.0.6" + node-addon-api "^6.0.0" + node-gyp-build "^4.5.0" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-to-istanbul@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" + integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + +varuint-bitcoin@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz#e76c138249d06138b480d4c5b40ef53693e24e92" + integrity sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw== + dependencies: + safe-buffer "^5.1.1" + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +ws@^7.5.2: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^21.0.1, yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.3.1: + version "17.7.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967" + integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==