git.delta.rocks / unique-network / refs/commits / 41cfad9c96de

difftreelog

Merge pull request #156 from usetech-llc/feature/NFTPAR-366_insert_ethereum_pallets_parachain

usetech-llc2021-06-23parents: #dc9fdbf #c28aba9.patch.diff
in: master
Implement parachain support for frontier

80 files changed

modified.devcontainer/Dockerfilediffbeforeafterboth
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -11,8 +11,10 @@
 RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash && \
     export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" && \
     [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
-    nvm install v12.20.1 && \
-    rustup toolchain install nightly-2021-03-01 && \
-    rustup default nightly-2021-03-01 && \
+    nvm install v16.2.0 && \
+    npm install -g yarn && \
+    rustup toolchain install nightly-2021-05-30 && \
+    rustup default nightly-2021-05-30 && \
     rustup target add wasm32-unknown-unknown && \
-    cargo install cargo-contract
+    rustup component add rustfmt clippy && \
+    cargo install cargo-expand cargo-edit cargo-contract
modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -18,10 +18,19 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7"
 dependencies = [
- "gimli",
+ "gimli 0.23.0",
 ]
 
 [[package]]
+name = "addr2line"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7a2e47a1fbe209ee101dd6d61285226744c6c8d3c21c8dc878ba6cb9f467f3a"
+dependencies = [
+ "gimli 0.24.0",
+]
+
+[[package]]
 name = "adler"
 version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -89,22 +98,11 @@
 
 [[package]]
 name = "aho-corasick"
-version = "0.7.15"
+version = "0.7.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
 dependencies = [
  "memchr",
-]
-
-[[package]]
-name = "alga"
-version = "0.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2"
-dependencies = [
- "approx 0.3.2",
- "num-complex 0.2.4",
- "num-traits",
 ]
 
 [[package]]
@@ -133,24 +131,24 @@
 
 [[package]]
 name = "anyhow"
-version = "1.0.40"
+version = "1.0.41"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28b2cd92db5cbd74e8e5028f7e27dd7aa3090e89e4f2a197cc7c8dfb69c7063b"
+checksum = "15af2628f6890fe2609a3b91bef4c83450512802e59489f9c1cb1fa5df064a61"
 
 [[package]]
 name = "approx"
-version = "0.3.2"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3"
+checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278"
 dependencies = [
  "num-traits",
 ]
 
 [[package]]
 name = "approx"
-version = "0.4.0"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278"
+checksum = "072df7202e63b127ab55acfe16ce97013d5b97bf160489336d3f1840fd78e99e"
 dependencies = [
  "num-traits",
 ]
@@ -178,9 +176,9 @@
 
 [[package]]
 name = "arrayvec"
-version = "0.7.0"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a2f58b0bb10c380af2b26e57212856b8c9a59e0925b4c20f4a174a49734eaf7"
+checksum = "be4dc07131ffa69b8072d35f5007352af944213cde02545e2103680baed38fcd"
 
 [[package]]
 name = "asn1_der"
@@ -217,16 +215,16 @@
 
 [[package]]
 name = "async-executor"
-version = "1.4.0"
+version = "1.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb877970c7b440ead138f6321a3b5395d6061183af779340b65e20c0fede9146"
+checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965"
 dependencies = [
  "async-task",
  "concurrent-queue",
  "fastrand",
  "futures-lite",
  "once_cell",
- "vec-arena",
+ "slab",
 ]
 
 [[package]]
@@ -247,29 +245,29 @@
 
 [[package]]
 name = "async-io"
-version = "1.3.1"
+version = "1.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9315f8f07556761c3e48fec2e6b276004acf426e6dc068b2c2251854d65ee0fd"
+checksum = "4bbfd5cf2794b1e908ea8457e6c45f8f8f1f6ec5f74617bf4662623f47503c3b"
 dependencies = [
  "concurrent-queue",
  "fastrand",
  "futures-lite",
  "libc",
  "log",
- "nb-connect",
  "once_cell",
  "parking",
  "polling",
- "vec-arena",
+ "slab",
+ "socket2 0.4.0",
  "waker-fn",
  "winapi 0.3.9",
 ]
 
 [[package]]
 name = "async-lock"
-version = "2.3.0"
+version = "2.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1996609732bde4a9988bc42125f55f2af5f3c36370e27c778d5191a4a1b63bfb"
+checksum = "e6a8ea61bf9947a1007c5cada31e647dbc77b103c679858150003ba697ea798b"
 dependencies = [
  "event-listener",
 ]
@@ -285,15 +283,16 @@
 
 [[package]]
 name = "async-process"
-version = "1.0.2"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef37b86e2fa961bae5a4d212708ea0154f904ce31d1a4a7f47e1bbc33a0c040b"
+checksum = "a8f38756dd9ac84671c428afbf7c9f7495feff9ec5b0710f17100098e5b354ac"
 dependencies = [
  "async-io",
  "blocking",
  "cfg-if 1.0.0",
  "event-listener",
  "futures-lite",
+ "libc",
  "once_cell",
  "signal-hook",
  "winapi 0.3.9",
@@ -311,7 +310,7 @@
  "async-io",
  "async-lock",
  "async-process",
- "crossbeam-utils 0.8.3",
+ "crossbeam-utils 0.8.5",
  "futures-channel",
  "futures-core",
  "futures-io",
@@ -330,9 +329,9 @@
 
 [[package]]
 name = "async-std-resolver"
-version = "0.20.1"
+version = "0.20.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f665c56111e244fe38e7708ee10948a4356ad6a548997c21f5a63a0f4e0edc4d"
+checksum = "ed4e2c3da14d8ad45acb1e3191db7a918e9505b6f155b218e70a7c9a1a48c638"
 dependencies = [
  "async-std",
  "async-trait",
@@ -350,9 +349,9 @@
 
 [[package]]
 name = "async-trait"
-version = "0.1.49"
+version = "0.1.50"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "589652ce7ccb335d1e7ecb3be145425702b290dbcb7029bbeaae263fc1d87b48"
+checksum = "0b98e84bbb4cbcdd97da190ba0c58a1bb0de2c1fdf67d159e192ed766aeca722"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -419,15 +418,16 @@
 
 [[package]]
 name = "backtrace"
-version = "0.3.56"
+version = "0.3.60"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc"
+checksum = "b7815ea54e4d821e791162e078acbebfd6d8c8939cd559c9335dceb1c8ca7282"
 dependencies = [
- "addr2line",
+ "addr2line 0.15.2",
+ "cc",
  "cfg-if 1.0.0",
  "libc",
  "miniz_oxide",
- "object",
+ "object 0.25.3",
  "rustc-demangle",
 ]
 
@@ -467,10 +467,10 @@
 source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=polkadot-v0.9.3#063e18a1f82945d5a304906db92bfbb571bac459"
 dependencies = [
  "beefy-primitives",
- "futures 0.3.14",
+ "futures 0.3.15",
  "hex",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "sc-client-api",
  "sc-keystore",
@@ -496,13 +496,13 @@
 dependencies = [
  "beefy-gadget",
  "beefy-primitives",
- "futures 0.3.14",
- "jsonrpc-core",
- "jsonrpc-core-client",
- "jsonrpc-derive",
- "jsonrpc-pubsub",
+ "futures 0.3.15",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-core-client 15.1.0",
+ "jsonrpc-derive 15.1.0",
+ "jsonrpc-pubsub 15.1.0",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sc-rpc",
  "serde",
  "serde_json",
@@ -515,7 +515,7 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=polkadot-v0.9.3#063e18a1f82945d5a304906db92bfbb571bac459"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api",
  "sp-application-crypto",
  "sp-core",
@@ -534,26 +534,21 @@
 
 [[package]]
 name = "bindgen"
-version = "0.54.0"
+version = "0.57.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "66c0bb6167449588ff70803f4127f0684f9063097eca5016f37eb52b92c2cf36"
+checksum = "fd4865004a46a0aafb2a0a5eb19d3c9fc46ee5f063a6cfc605c69ac9ecf5263d"
 dependencies = [
  "bitflags",
  "cexpr",
- "cfg-if 0.1.10",
  "clang-sys",
- "clap",
- "env_logger 0.7.1",
  "lazy_static",
  "lazycell",
- "log",
  "peeking_take_while",
  "proc-macro2",
  "quote",
  "regex",
  "rustc-hash",
  "shlex",
- "which 3.1.1",
 ]
 
 [[package]]
@@ -564,12 +559,22 @@
 
 [[package]]
 name = "bitvec"
-version = "0.20.2"
+version = "0.17.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f682656975d3a682daff957be4ddeb65d6ad656737cd821f2d00685ae466af1"
+checksum = "41262f11d771fd4a61aa3ce019fca363b4b6c282fca9da2a31186d3965a47a5c"
 dependencies = [
+ "either",
+ "radium 0.3.0",
+]
+
+[[package]]
+name = "bitvec"
+version = "0.20.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848"
+dependencies = [
  "funty",
- "radium",
+ "radium 0.6.2",
  "tap",
  "wyz",
 ]
@@ -619,9 +624,9 @@
 
 [[package]]
 name = "blake3"
-version = "0.3.7"
+version = "0.3.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9ff35b701f3914bdb8fad3368d822c766ef2858b2583198e41639b936f09d3f"
+checksum = "b64485778c4f16a6a5a9d335e80d449ac6c70cdd6a06d2af18a6f6f775a125b3"
 dependencies = [
  "arrayref",
  "arrayvec 0.5.2",
@@ -699,7 +704,7 @@
 dependencies = [
  "finality-grandpa",
  "frame-support",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-core",
  "sp-finality-grandpa",
@@ -715,7 +720,7 @@
  "bp-runtime",
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-std",
 ]
 
@@ -728,7 +733,7 @@
  "bp-runtime",
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api",
  "sp-core",
  "sp-runtime",
@@ -745,7 +750,7 @@
  "bp-messages",
  "bp-polkadot-core",
  "bp-runtime",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api",
  "sp-runtime",
  "sp-std",
@@ -760,7 +765,7 @@
  "frame-support",
  "hash-db",
  "num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -777,7 +782,7 @@
  "bp-header-chain",
  "ed25519-dalek",
  "finality-grandpa",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-application-crypto",
  "sp-finality-grandpa",
  "sp-runtime",
@@ -793,7 +798,7 @@
  "bp-messages",
  "bp-polkadot-core",
  "bp-runtime",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api",
  "sp-runtime",
  "sp-std",
@@ -808,9 +813,9 @@
 
 [[package]]
 name = "bstr"
-version = "0.2.15"
+version = "0.2.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d"
+checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279"
 dependencies = [
  "memchr",
 ]
@@ -826,9 +831,15 @@
 
 [[package]]
 name = "bumpalo"
-version = "3.6.1"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631"
+
+[[package]]
+name = "byte-slice-cast"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe"
+checksum = "b0a5e3906bcbf133e33c1d4d95afc664ad37fbdb9f6568d8043e7ea8c27d93d3"
 
 [[package]]
 name = "byte-slice-cast"
@@ -901,9 +912,9 @@
 
 [[package]]
 name = "cc"
-version = "1.0.67"
+version = "1.0.68"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd"
+checksum = "4a72c244c1ff497a746a7e1fb3d14bd08420ecda70c8f25c7112f2781652d787"
 dependencies = [
  "jobserver",
 ]
@@ -1002,13 +1013,13 @@
 
 [[package]]
 name = "clang-sys"
-version = "0.29.3"
+version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe6837df1d5cba2397b835c8530f51723267e16abbf83892e9e5af4f0e5dd10a"
+checksum = "853eda514c284c2287f4bf20ae614f8781f40a81d32ecda6e91449304dfe077c"
 dependencies = [
  "glob",
  "libc",
- "libloading",
+ "libloading 0.7.0",
 ]
 
 [[package]]
@@ -1020,7 +1031,7 @@
  "ansi_term 0.11.0",
  "atty",
  "bitflags",
- "strsim",
+ "strsim 0.8.0",
  "textwrap",
  "unicode-width",
  "vec_map",
@@ -1083,10 +1094,13 @@
 ]
 
 [[package]]
-name = "cpuid-bool"
-version = "0.1.2"
+name = "cpufeatures"
+version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634"
+checksum = "ed00c67cb5d0a7d64a44f6ad2668db7e7530311dd53ea79bcd4fb022c64911c8"
+dependencies = [
+ "libc",
+]
 
 [[package]]
 name = "cpuid-bool"
@@ -1114,7 +1128,7 @@
  "cranelift-codegen-meta",
  "cranelift-codegen-shared",
  "cranelift-entity",
- "gimli",
+ "gimli 0.23.0",
  "log",
  "regalloc",
  "serde",
@@ -1182,7 +1196,7 @@
  "cranelift-codegen",
  "cranelift-entity",
  "cranelift-frontend",
- "itertools 0.10.0",
+ "itertools 0.10.1",
  "log",
  "serde",
  "smallvec 1.6.1",
@@ -1206,7 +1220,7 @@
 checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4"
 dependencies = [
  "cfg-if 1.0.0",
- "crossbeam-utils 0.8.3",
+ "crossbeam-utils 0.8.5",
 ]
 
 [[package]]
@@ -1227,8 +1241,8 @@
 checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9"
 dependencies = [
  "cfg-if 1.0.0",
- "crossbeam-epoch 0.9.3",
- "crossbeam-utils 0.8.3",
+ "crossbeam-epoch 0.9.5",
+ "crossbeam-utils 0.8.5",
 ]
 
 [[package]]
@@ -1248,14 +1262,14 @@
 
 [[package]]
 name = "crossbeam-epoch"
-version = "0.9.3"
+version = "0.9.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12"
+checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd"
 dependencies = [
  "cfg-if 1.0.0",
- "crossbeam-utils 0.8.3",
+ "crossbeam-utils 0.8.5",
  "lazy_static",
- "memoffset 0.6.3",
+ "memoffset 0.6.4",
  "scopeguard",
 ]
 
@@ -1283,11 +1297,10 @@
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.3"
+version = "0.8.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49"
+checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db"
 dependencies = [
- "autocfg",
  "cfg-if 1.0.0",
  "lazy_static",
 ]
@@ -1366,8 +1379,8 @@
  "cumulus-client-consensus-common",
  "cumulus-client-network",
  "cumulus-primitives-core",
- "futures 0.3.14",
- "parity-scale-codec",
+ "futures 0.3.15",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.10.2",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -1390,8 +1403,8 @@
  "async-trait",
  "cumulus-client-consensus-common",
  "cumulus-primitives-core",
- "futures 0.3.14",
- "parity-scale-codec",
+ "futures 0.3.15",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.10.2",
  "polkadot-service",
  "sc-client-api",
@@ -1419,8 +1432,8 @@
 dependencies = [
  "async-trait",
  "dyn-clone",
- "futures 0.3.14",
- "parity-scale-codec",
+ "futures 0.3.15",
+ "parity-scale-codec 2.1.3",
  "polkadot-primitives",
  "polkadot-runtime",
  "sc-client-api",
@@ -1442,9 +1455,9 @@
 source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.3#78b31b21122995b49f3c2cfe2791f188e33e5917"
 dependencies = [
  "derive_more",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.10.2",
  "polkadot-node-primitives",
  "polkadot-parachain",
@@ -1466,9 +1479,9 @@
 source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.3#78b31b21122995b49f3c2cfe2791f188e33e5917"
 dependencies = [
  "cumulus-primitives-core",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
  "polkadot-overseer",
@@ -1476,7 +1489,7 @@
  "polkadot-primitives",
  "polkadot-service",
  "polkadot-statement-table",
- "rand 0.8.3",
+ "rand 0.8.4",
  "sc-client-api",
  "sp-api",
  "sp-consensus",
@@ -1495,7 +1508,7 @@
  "cumulus-client-consensus-common",
  "cumulus-client-pov-recovery",
  "cumulus-primitives-core",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.10.2",
  "polkadot-overseer",
  "polkadot-primitives",
@@ -1523,7 +1536,7 @@
  "frame-support",
  "frame-system",
  "pallet-aura",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-application-crypto",
  "sp-consensus-aura",
@@ -1540,9 +1553,9 @@
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec",
- "rand 0.8.3",
- "rand_chacha 0.3.0",
+ "parity-scale-codec 2.1.3",
+ "rand 0.8.4",
+ "rand_chacha 0.3.1",
  "sp-io",
  "sp-runtime",
  "sp-std",
@@ -1564,7 +1577,7 @@
  "log",
  "memory-db",
  "pallet-balances",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-parachain",
  "serde",
  "sp-core",
@@ -1588,7 +1601,7 @@
  "cumulus-primitives-core",
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-io",
  "sp-runtime",
@@ -1605,9 +1618,9 @@
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec",
- "rand 0.8.3",
- "rand_chacha 0.3.0",
+ "parity-scale-codec 2.1.3",
+ "rand 0.8.4",
+ "rand_chacha 0.3.1",
  "sp-runtime",
  "sp-std",
  "xcm",
@@ -1620,8 +1633,8 @@
 source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.3#78b31b21122995b49f3c2cfe2791f188e33e5917"
 dependencies = [
  "frame-support",
- "impl-trait-for-tuples",
- "parity-scale-codec",
+ "impl-trait-for-tuples 0.2.1",
+ "parity-scale-codec 2.1.3",
  "polkadot-core-primitives",
  "polkadot-parachain",
  "polkadot-primitives",
@@ -1639,7 +1652,7 @@
 dependencies = [
  "async-trait",
  "cumulus-primitives-core",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-service",
  "sc-client-api",
  "sp-api",
@@ -1659,8 +1672,8 @@
 dependencies = [
  "cumulus-primitives-core",
  "frame-support",
- "impl-trait-for-tuples",
- "parity-scale-codec",
+ "impl-trait-for-tuples 0.2.1",
+ "parity-scale-codec 2.1.3",
  "polkadot-core-primitives",
  "polkadot-parachain",
  "polkadot-primitives",
@@ -1697,6 +1710,41 @@
 ]
 
 [[package]]
+name = "darling"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "757c0ded2af11d8e739c4daea1ac623dd1624b06c844cf3f5a39f1bdbd99bb12"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c34d8efb62d0c2d7f60ece80f75e5c63c1588ba68032740494b0b9a996466e3"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.10.0",
+ "syn",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade7bff147130fe5e6d39f089c6bd49ec0250f35d70b2eebf72afdfc919f15cc"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn",
+]
+
+[[package]]
 name = "data-encoding"
 version = "2.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1704,9 +1752,9 @@
 
 [[package]]
 name = "data-encoding-macro"
-version = "0.1.10"
+version = "0.1.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a94feec3d2ba66c0b6621bca8bc6f68415b1e5c69af3586fdd0af9fd9f29b17"
+checksum = "86927b7cd2fe88fa698b87404b287ab98d1a0063a34071d92e575b72d3029aca"
 dependencies = [
  "data-encoding",
  "data-encoding-macro-internal",
@@ -1714,9 +1762,9 @@
 
 [[package]]
 name = "data-encoding-macro-internal"
-version = "0.1.9"
+version = "0.1.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0f83e699727abca3c56e187945f303389590305ab2f0185ea445aa66e8d5f2a"
+checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db"
 dependencies = [
  "data-encoding",
  "syn",
@@ -1735,9 +1783,9 @@
 
 [[package]]
 name = "derive_more"
-version = "0.99.13"
+version = "0.99.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f82b1b72f1263f214c0f823371768776c4f5841b942c9883aa8e5ec584fd0ba6"
+checksum = "5cc7b9cef1e351660e5443924e4f43ab25fbbed3e9a5f052df3677deb4d6b320"
 dependencies = [
  "convert_case",
  "proc-macro2",
@@ -1765,9 +1813,9 @@
 
 [[package]]
 name = "directories"
-version = "3.0.1"
+version = "3.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8fed639d60b58d0f53498ab13d26f621fd77569cc6edb031f4cc36a2ad9da0f"
+checksum = "e69600ff1703123957937708eb27f7a564e48885c537782722ed0ba3189ce1d7"
 dependencies = [
  "dirs-sys",
 ]
@@ -1784,12 +1832,12 @@
 
 [[package]]
 name = "dirs-sys"
-version = "0.3.5"
+version = "0.3.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a"
+checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
 dependencies = [
  "libc",
- "redox_users 0.3.5",
+ "redox_users",
  "winapi 0.3.9",
 ]
 
@@ -1800,7 +1848,7 @@
 checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
 dependencies = [
  "libc",
- "redox_users 0.4.0",
+ "redox_users",
  "winapi 0.3.9",
 ]
 
@@ -1843,9 +1891,9 @@
 
 [[package]]
 name = "ed25519"
-version = "1.0.3"
+version = "1.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef"
+checksum = "8d0860415b12243916284c67a9be413e044ee6668247b99ba26d94b2bc06c8f6"
 dependencies = [
  "signature",
 ]
@@ -1860,7 +1908,7 @@
  "ed25519",
  "rand 0.7.3",
  "serde",
- "sha2 0.9.3",
+ "sha2 0.9.5",
  "zeroize",
 ]
 
@@ -1928,9 +1976,9 @@
 
 [[package]]
 name = "env_logger"
-version = "0.8.3"
+version = "0.8.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17392a012ea30ef05a610aa97dfb49496e71c9f676b27879922ea5bdf60d9d3f"
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
 dependencies = [
  "atty",
  "humantime 2.1.0",
@@ -1947,9 +1995,9 @@
 
 [[package]]
 name = "erased-serde"
-version = "0.3.13"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0465971a8cc1fa2455c8465aaa377131e1f1cf4983280f474a13e68793aa770c"
+checksum = "e5b36e6f2295f393f44894c6031f67df4d185b984cd54d08f768ce678007efcd"
 dependencies = [
  "serde",
 ]
@@ -1977,29 +2025,92 @@
 
 [[package]]
 name = "ethbloom"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71a6567e6fd35589fea0c63b94b4cf2e55573e413901bdbe60ab15cf0e25e5df"
+dependencies = [
+ "crunchy",
+ "fixed-hash 0.6.1",
+ "impl-rlp 0.2.1",
+ "impl-serde",
+ "tiny-keccak",
+]
+
+[[package]]
+name = "ethbloom"
 version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "779864b9c7f7ead1f092972c3257496c6a84b46dba2ce131dd8a282cb2cc5972"
 dependencies = [
  "crunchy",
- "fixed-hash",
- "impl-rlp",
+ "fixed-hash 0.7.0",
+ "impl-codec 0.5.0",
+ "impl-rlp 0.3.0",
  "impl-serde",
  "tiny-keccak",
 ]
 
 [[package]]
+name = "ethereum"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567ce064a8232c16e2b2c2173a936b91fbe35c2f2c5278871f5a1a31688b42e9"
+dependencies = [
+ "ethereum-types 0.11.0",
+ "funty",
+ "hash-db",
+ "hash256-std-hasher",
+ "parity-scale-codec 2.1.3",
+ "rlp 0.5.0",
+ "rlp-derive",
+ "serde",
+ "sha3 0.9.1",
+ "triehash",
+]
+
+[[package]]
+name = "ethereum-tx-sign"
+version = "3.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdcbb5f48282fa71ba2864818a442d0ee0ca04ebc9ef9eb1837c48298c3b8cbf"
+dependencies = [
+ "ethereum-types 0.9.2",
+ "num-traits",
+ "rlp 0.4.6",
+ "secp256k1",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tiny-keccak",
+]
+
+[[package]]
 name = "ethereum-types"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "473aecff686bd8e7b9db0165cbbb53562376b39bf35b427f0c60446a9e1634b0"
+dependencies = [
+ "ethbloom 0.9.2",
+ "fixed-hash 0.6.1",
+ "impl-rlp 0.2.1",
+ "impl-serde",
+ "primitive-types 0.7.3",
+ "uint 0.8.5",
+]
+
+[[package]]
+name = "ethereum-types"
 version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f64b5df66a228d85e4b17e5d6c6aa43b0310898ffe8a85988c4c032357aaabfd"
 dependencies = [
- "ethbloom",
- "fixed-hash",
- "impl-rlp",
+ "ethbloom 0.11.0",
+ "fixed-hash 0.7.0",
+ "impl-codec 0.5.0",
+ "impl-rlp 0.3.0",
  "impl-serde",
- "primitive-types",
- "uint",
+ "primitive-types 0.9.0",
+ "uint 0.9.0",
 ]
 
 [[package]]
@@ -2009,12 +2120,87 @@
 checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59"
 
 [[package]]
+name = "evm"
+version = "0.27.0"
+source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output-parachain#e13990a627375f327ca7da3c85d9bdfa0a9e903b"
+dependencies = [
+ "environmental",
+ "ethereum",
+ "evm-core",
+ "evm-gasometer",
+ "evm-runtime",
+ "log",
+ "parity-scale-codec 2.1.3",
+ "primitive-types 0.9.0",
+ "rlp 0.5.0",
+ "serde",
+ "sha3 0.8.2",
+]
+
+[[package]]
+name = "evm-coder"
+version = "0.1.0"
+dependencies = [
+ "ethereum",
+ "evm-coder-macros",
+ "hex",
+ "hex-literal",
+ "primitive-types 0.9.0",
+]
+
+[[package]]
+name = "evm-coder-macros"
+version = "0.1.0"
+dependencies = [
+ "Inflector",
+ "darling",
+ "hex",
+ "proc-macro2",
+ "quote",
+ "sha3 0.9.1",
+ "syn",
+]
+
+[[package]]
+name = "evm-core"
+version = "0.27.1"
+source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output-parachain#e13990a627375f327ca7da3c85d9bdfa0a9e903b"
+dependencies = [
+ "funty",
+ "parity-scale-codec 2.1.3",
+ "primitive-types 0.9.0",
+ "serde",
+]
+
+[[package]]
+name = "evm-gasometer"
+version = "0.27.0"
+source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output-parachain#e13990a627375f327ca7da3c85d9bdfa0a9e903b"
+dependencies = [
+ "environmental",
+ "evm-core",
+ "evm-runtime",
+ "primitive-types 0.9.0",
+]
+
+[[package]]
+name = "evm-runtime"
+version = "0.27.0"
+source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output-parachain#e13990a627375f327ca7da3c85d9bdfa0a9e903b"
+dependencies = [
+ "environmental",
+ "evm-core",
+ "primitive-types 0.9.0",
+ "sha3 0.8.2",
+]
+
+[[package]]
 name = "exit-future"
 version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
 ]
 
 [[package]]
@@ -2053,14 +2239,127 @@
 
 [[package]]
 name = "fastrand"
-version = "1.4.0"
+version = "1.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca5faf057445ce5c9d4329e382b2ce7ca38550ef3b73a5348362d5f24e0c7fe3"
+checksum = "77b705829d1e87f762c2df6da140b26af5839e1033aa84aa5f56bb688e4e1bdb"
 dependencies = [
  "instant",
 ]
 
 [[package]]
+name = "fc-consensus"
+version = "2.0.0-dev"
+source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#48676fa655fdfb6ceb16fc67d7250d8e618a5843"
+dependencies = [
+ "async-trait",
+ "derive_more",
+ "fc-db",
+ "fp-consensus",
+ "fp-rpc",
+ "futures 0.3.15",
+ "log",
+ "parity-scale-codec 2.1.3",
+ "sc-client-api",
+ "sp-api",
+ "sp-block-builder",
+ "sp-blockchain",
+ "sp-consensus",
+ "sp-core",
+ "sp-inherents",
+ "sp-runtime",
+ "sp-timestamp",
+ "substrate-prometheus-endpoint",
+]
+
+[[package]]
+name = "fc-db"
+version = "1.0.0"
+source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#48676fa655fdfb6ceb16fc67d7250d8e618a5843"
+dependencies = [
+ "kvdb",
+ "kvdb-rocksdb",
+ "parity-scale-codec 2.1.3",
+ "parking_lot 0.11.1",
+ "sp-core",
+ "sp-database",
+ "sp-runtime",
+]
+
+[[package]]
+name = "fc-mapping-sync"
+version = "2.0.0-dev"
+source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#48676fa655fdfb6ceb16fc67d7250d8e618a5843"
+dependencies = [
+ "fc-consensus",
+ "fc-db",
+ "fp-consensus",
+ "fp-rpc",
+ "futures 0.3.15",
+ "futures-timer 3.0.2",
+ "log",
+ "sc-client-api",
+ "sp-api",
+ "sp-blockchain",
+ "sp-runtime",
+]
+
+[[package]]
+name = "fc-rpc"
+version = "2.0.0-dev"
+source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#48676fa655fdfb6ceb16fc67d7250d8e618a5843"
+dependencies = [
+ "ethereum",
+ "ethereum-types 0.11.0",
+ "evm",
+ "fc-consensus",
+ "fc-db",
+ "fc-rpc-core",
+ "fp-consensus",
+ "fp-evm",
+ "fp-rpc",
+ "fp-storage",
+ "futures 0.3.15",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-core-client 14.2.0",
+ "jsonrpc-derive 14.2.2",
+ "jsonrpc-pubsub 15.1.0",
+ "libsecp256k1",
+ "log",
+ "pallet-ethereum",
+ "pallet-evm",
+ "parity-scale-codec 2.1.3",
+ "rand 0.7.3",
+ "rlp 0.5.0",
+ "rustc-hex",
+ "sc-client-api",
+ "sc-network",
+ "sc-rpc",
+ "sc-service",
+ "sha3 0.8.2",
+ "sp-api",
+ "sp-blockchain",
+ "sp-io",
+ "sp-runtime",
+ "sp-storage",
+ "sp-transaction-pool",
+]
+
+[[package]]
+name = "fc-rpc-core"
+version = "1.1.0-dev"
+source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#48676fa655fdfb6ceb16fc67d7250d8e618a5843"
+dependencies = [
+ "ethereum-types 0.11.0",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-core-client 14.2.0",
+ "jsonrpc-derive 14.2.2",
+ "jsonrpc-pubsub 15.1.0",
+ "rustc-hex",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
 name = "fdlimit"
 version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2081,27 +2380,39 @@
 
 [[package]]
 name = "finality-grandpa"
-version = "0.14.0"
+version = "0.14.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6447e2f8178843749e8c8003206def83ec124a7859475395777a28b5338647c"
+checksum = "74a1bfdcc776e63e49f741c7ce6116fa1b887e8ac2e3ccb14dd4aa113e54feb9"
 dependencies = [
  "either",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "log",
  "num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
 ]
 
 [[package]]
 name = "fixed-hash"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11498d382790b7a8f2fd211780bec78619bba81cdad3a283997c0c41f836759c"
+dependencies = [
+ "byteorder",
+ "rand 0.7.3",
+ "rustc-hex",
+ "static_assertions",
+]
+
+[[package]]
+name = "fixed-hash"
 version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c"
 dependencies = [
  "byteorder",
- "rand 0.8.3",
+ "rand 0.8.4",
  "rustc-hex",
  "static_assertions",
 ]
@@ -2152,7 +2463,7 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
 ]
 
 [[package]]
@@ -2166,6 +2477,54 @@
 ]
 
 [[package]]
+name = "fp-consensus"
+version = "1.0.0"
+source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#48676fa655fdfb6ceb16fc67d7250d8e618a5843"
+dependencies = [
+ "ethereum",
+ "parity-scale-codec 2.1.3",
+ "rlp 0.5.0",
+ "sha3 0.8.2",
+ "sp-core",
+ "sp-runtime",
+ "sp-std",
+]
+
+[[package]]
+name = "fp-evm"
+version = "2.0.0"
+source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#48676fa655fdfb6ceb16fc67d7250d8e618a5843"
+dependencies = [
+ "evm",
+ "impl-trait-for-tuples 0.1.3",
+ "parity-scale-codec 2.1.3",
+ "serde",
+ "sp-core",
+ "sp-std",
+]
+
+[[package]]
+name = "fp-rpc"
+version = "2.0.0"
+source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#48676fa655fdfb6ceb16fc67d7250d8e618a5843"
+dependencies = [
+ "ethereum",
+ "ethereum-types 0.11.0",
+ "fp-evm",
+ "parity-scale-codec 2.1.3",
+ "sp-api",
+ "sp-core",
+ "sp-io",
+ "sp-runtime",
+ "sp-std",
+]
+
+[[package]]
+name = "fp-storage"
+version = "1.0.1"
+source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#48676fa655fdfb6ceb16fc67d7250d8e618a5843"
+
+[[package]]
 name = "frame-benchmarking"
 version = "3.1.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
@@ -2174,7 +2533,7 @@
  "frame-system",
  "linregress",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "paste",
  "sp-api",
  "sp-io",
@@ -2193,7 +2552,7 @@
  "chrono",
  "frame-benchmarking",
  "handlebars",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sc-cli",
  "sc-client-db",
  "sc-executor",
@@ -2214,7 +2573,7 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-arithmetic",
  "sp-npos-elections",
  "sp-std",
@@ -2227,7 +2586,7 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -2240,7 +2599,7 @@
 version = "13.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-core",
  "sp-std",
@@ -2254,10 +2613,10 @@
  "bitflags",
  "frame-metadata",
  "frame-support-procedural",
- "impl-trait-for-tuples",
+ "impl-trait-for-tuples 0.2.1",
  "log",
  "once_cell",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "paste",
  "serde",
  "smallvec 1.6.1",
@@ -2312,9 +2671,9 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "frame-support",
- "impl-trait-for-tuples",
+ "impl-trait-for-tuples 0.2.1",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-core",
  "sp-io",
@@ -2331,7 +2690,7 @@
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-runtime",
  "sp-std",
@@ -2342,7 +2701,7 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api",
 ]
 
@@ -2352,7 +2711,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "frame-support",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api",
  "sp-runtime",
  "sp-std",
@@ -2360,9 +2719,9 @@
 
 [[package]]
 name = "fs-err"
-version = "2.5.0"
+version = "2.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bcd1163ae48bda72a20ae26d66a04d3094135cadab911cff418ae5e33f253431"
+checksum = "5ebd3504ad6116843b8375ad70df74e7bfe83cac77a1f3fe73200c844d43bfe0"
 
 [[package]]
 name = "fs-swap"
@@ -2372,7 +2731,7 @@
 dependencies = [
  "lazy_static",
  "libc",
- "libloading",
+ "libloading 0.5.2",
  "winapi 0.3.9",
 ]
 
@@ -2422,9 +2781,9 @@
 
 [[package]]
 name = "futures"
-version = "0.3.14"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9d5813545e459ad3ca1bff9915e9ad7f1a47dc6a91b627ce321d5863b7dd253"
+checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27"
 dependencies = [
  "futures-channel",
  "futures-core",
@@ -2437,9 +2796,9 @@
 
 [[package]]
 name = "futures-channel"
-version = "0.3.14"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce79c6a52a299137a6013061e0cf0e688fce5d7f1bc60125f520912fdb29ec25"
+checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2"
 dependencies = [
  "futures-core",
  "futures-sink",
@@ -2447,9 +2806,9 @@
 
 [[package]]
 name = "futures-core"
-version = "0.3.14"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815"
+checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1"
 
 [[package]]
 name = "futures-cpupool"
@@ -2468,7 +2827,7 @@
 checksum = "fdcef58a173af8148b182684c9f2d5250875adbcaff7b5794073894f9d8634a9"
 dependencies = [
  "futures 0.1.31",
- "futures 0.3.14",
+ "futures 0.3.15",
  "lazy_static",
  "log",
  "parking_lot 0.9.0",
@@ -2479,9 +2838,9 @@
 
 [[package]]
 name = "futures-executor"
-version = "0.3.14"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10f6cb7042eda00f0049b1d2080aa4b93442997ee507eb3828e8bd7577f94c9d"
+checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79"
 dependencies = [
  "futures-core",
  "futures-task",
@@ -2491,15 +2850,15 @@
 
 [[package]]
 name = "futures-io"
-version = "0.3.14"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "365a1a1fb30ea1c03a830fdb2158f5236833ac81fa0ad12fe35b29cddc35cb04"
+checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1"
 
 [[package]]
 name = "futures-lite"
-version = "1.11.3"
+version = "1.12.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4481d0cd0de1d204a4fa55e7d45f07b1d958abcb06714b3446438e2eff695fb"
+checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
 dependencies = [
  "fastrand",
  "futures-core",
@@ -2512,10 +2871,11 @@
 
 [[package]]
 name = "futures-macro"
-version = "0.3.14"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "668c6733a182cd7deb4f1de7ba3bf2120823835b3bcfbeacf7d2c4a773c1bb8b"
+checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121"
 dependencies = [
+ "autocfg",
  "proc-macro-hack",
  "proc-macro2",
  "quote",
@@ -2529,21 +2889,21 @@
 checksum = "3a1387e07917c711fb4ee4f48ea0adb04a3c9739e53ef85bf43ae1edc2937a8b"
 dependencies = [
  "futures-io",
- "rustls 0.19.0",
+ "rustls 0.19.1",
  "webpki",
 ]
 
 [[package]]
 name = "futures-sink"
-version = "0.3.14"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c5629433c555de3d82861a7a4e3794a4c40040390907cfbfd7143a92a426c23"
+checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282"
 
 [[package]]
 name = "futures-task"
-version = "0.3.14"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba7aa51095076f3ba6d9a1f702f74bd05ec65f555d70d2033d55ba8d69f581bc"
+checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae"
 
 [[package]]
 name = "futures-timer"
@@ -2559,10 +2919,11 @@
 
 [[package]]
 name = "futures-util"
-version = "0.3.14"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c144ad54d60f23927f0a6b6d816e4271278b64f005ad65e4e35291d2de9c025"
+checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967"
 dependencies = [
+ "autocfg",
  "futures 0.1.31",
  "futures-channel",
  "futures-core",
@@ -2595,15 +2956,6 @@
 
 [[package]]
 name = "generic-array"
-version = "0.13.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f797e67af32588215eaaab8327027ee8e71b9dd0b2b26996aedf20c030fce309"
-dependencies = [
- "typenum",
-]
-
-[[package]]
-name = "generic-array"
 version = "0.14.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817"
@@ -2625,9 +2977,9 @@
 
 [[package]]
 name = "getrandom"
-version = "0.2.2"
+version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
 dependencies = [
  "cfg-if 1.0.0",
  "libc",
@@ -2656,6 +3008,12 @@
 ]
 
 [[package]]
+name = "gimli"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4075386626662786ddb0ec9081e7c7eeb1ba31951f447ca780ef9f5d568189"
+
+[[package]]
 name = "glob"
 version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2663,9 +3021,9 @@
 
 [[package]]
 name = "globset"
-version = "0.4.6"
+version = "0.4.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c152169ef1e421390738366d2f796655fec62621dabbd0fd476f905934061e4a"
+checksum = "f0fc1b9fa0e64ffb1aa5b95daa0f0f167734fd528b7c02eabc581d9d843649b1"
 dependencies = [
  "aho-corasick",
  "bstr",
@@ -2765,9 +3123,9 @@
 
 [[package]]
 name = "heck"
-version = "0.3.2"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
 dependencies = [
  "unicode-segmentation",
 ]
@@ -2887,9 +3245,9 @@
 
 [[package]]
 name = "httparse"
-version = "1.3.6"
+version = "1.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc35c995b9d93ec174cf9a27d425c7892722101e14993cd227fdb51d70cf9589"
+checksum = "f3a87b616e37e93c22fb19bcd386f02f3af5ea98a25670ad0fce773de23c5e68"
 
 [[package]]
 name = "httpdate"
@@ -2958,7 +3316,7 @@
  "httparse",
  "httpdate",
  "itoa",
- "pin-project 1.0.6",
+ "pin-project 1.0.7",
  "socket2 0.3.19",
  "tokio 0.2.25",
  "tower-service",
@@ -2985,6 +3343,12 @@
 ]
 
 [[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
 name = "idna"
 version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2997,9 +3361,9 @@
 
 [[package]]
 name = "idna"
-version = "0.2.2"
+version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89829a5d69c23d348314a7ac337fe39173b61149a9864deabd260983aed48c21"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
 dependencies = [
  "matches",
  "unicode-bidi",
@@ -3029,12 +3393,12 @@
 
 [[package]]
 name = "if-watch"
-version = "0.2.1"
+version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "144c0ecbda48cc819482c37e460723b634dc060e23922f8ace87d94ff95ea4e5"
+checksum = "ae8ab7f67bad3240049cb24fb9cb0b4c2c6af4c245840917fbbdededeee91179"
 dependencies = [
  "async-io",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-lite",
  "if-addrs",
  "ipnet",
@@ -3045,11 +3409,29 @@
 
 [[package]]
 name = "impl-codec"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1be51a921b067b0eaca2fad532d9400041561aa922221cc65f95a85641c6bf53"
+dependencies = [
+ "parity-scale-codec 1.3.7",
+]
+
+[[package]]
+name = "impl-codec"
 version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "df170efa359aebdd5cb7fe78edcc67107748e4737bdca8a8fb40d15ea7a877ed"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
+]
+
+[[package]]
+name = "impl-rlp"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f7a72f11830b52333f36e3b09a288333888bf54380fd0ac0790a3c31ab0f3c5"
+dependencies = [
+ "rlp 0.4.6",
 ]
 
 [[package]]
@@ -3058,7 +3440,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808"
 dependencies = [
- "rlp",
+ "rlp 0.5.0",
 ]
 
 [[package]]
@@ -3072,6 +3454,17 @@
 
 [[package]]
 name = "impl-trait-for-tuples"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef5550a42e3740a0e71f909d4c861056a284060af885ae7aa6242820f920d9d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "impl-trait-for-tuples"
 version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d5dacb10c5b3bb92d46ba347505a9041e676bb20ad220101326bffb0c93031ee"
@@ -3122,7 +3515,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "64fa110ec7b8f493f416eed552740d10e7030ad5f63b2308f82c9608ec2df275"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 2.0.2",
 ]
 
@@ -3155,9 +3548,9 @@
 
 [[package]]
 name = "ipnet"
-version = "2.3.0"
+version = "2.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "47be2f14c678be2fdcab04ab1171db51b2762ce6f0a8ee87c8dd4a04ed216135"
+checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9"
 
 [[package]]
 name = "itertools"
@@ -3170,9 +3563,9 @@
 
 [[package]]
 name = "itertools"
-version = "0.10.0"
+version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37d572918e350e82412fe766d24b15e6682fb2ed2bbe018280caa810397cb319"
+checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
 dependencies = [
  "either",
 ]
@@ -3185,32 +3578,48 @@
 
 [[package]]
 name = "jobserver"
-version = "0.1.21"
+version = "0.1.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2"
+checksum = "972f5ae5d1cb9c6ae417789196c803205313edde988685da5e3aae0827b9e7fd"
 dependencies = [
  "libc",
 ]
 
 [[package]]
 name = "js-sys"
-version = "0.3.50"
+version = "0.3.51"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d99f9e3e84b8f67f846ef5b4cbbc3b1c29f6c759fcbce6f01aa0e73d932a24c"
+checksum = "83bdfbace3a0e81a4253f73b49e960b053e396a11012cbd49b9b74d6a2b67062"
 dependencies = [
  "wasm-bindgen",
 ]
 
 [[package]]
 name = "jsonrpc-client-transports"
+version = "14.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2773fa94a2a1fd51efb89a8f45b8861023dbb415d18d3c9235ae9388d780f9ec"
+dependencies = [
+ "failure",
+ "futures 0.1.31",
+ "jsonrpc-core 14.2.0",
+ "jsonrpc-pubsub 14.2.0",
+ "log",
+ "serde",
+ "serde_json",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "jsonrpc-client-transports"
 version = "15.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "489b9c612e60c766f751ab40fcb43cbb55a1e10bb44a9b4307ed510ca598cbd7"
 dependencies = [
  "failure",
  "futures 0.1.31",
- "jsonrpc-core",
- "jsonrpc-pubsub",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-pubsub 15.1.0",
  "log",
  "serde",
  "serde_json",
@@ -3219,6 +3628,19 @@
 
 [[package]]
 name = "jsonrpc-core"
+version = "14.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0747307121ffb9703afd93afbd0fb4f854c38fb873f2c8b90e0e902f27c7b62"
+dependencies = [
+ "futures 0.1.31",
+ "log",
+ "serde",
+ "serde_derive",
+ "serde_json",
+]
+
+[[package]]
+name = "jsonrpc-core"
 version = "15.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0745a6379e3edc893c84ec203589790774e4247420033e71a76d3ab4687991fa"
@@ -3232,15 +3654,36 @@
 
 [[package]]
 name = "jsonrpc-core-client"
+version = "14.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34221123bc79b66279a3fde2d3363553835b43092d629b34f2e760c44dc94713"
+dependencies = [
+ "jsonrpc-client-transports 14.2.1",
+]
+
+[[package]]
+name = "jsonrpc-core-client"
 version = "15.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6f764902d7b891344a0acb65625f32f6f7c6db006952143bd650209fbe7d94db"
 dependencies = [
- "jsonrpc-client-transports",
+ "jsonrpc-client-transports 15.1.0",
 ]
 
 [[package]]
 name = "jsonrpc-derive"
+version = "14.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0e77e8812f02155b85a677a96e1d16b60181950c0636199bc4528524fba98dc"
+dependencies = [
+ "proc-macro-crate 0.1.5",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "jsonrpc-derive"
 version = "15.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "99a847f9ec7bb52149b2786a17c9cb260d6effc6b8eeb8c16b343a487a7563a3"
@@ -3258,7 +3701,7 @@
 checksum = "4fb5c4513b7b542f42da107942b7b759f27120b5cc894729f88254b28dff44b7"
 dependencies = [
  "hyper 0.12.36",
- "jsonrpc-core",
+ "jsonrpc-core 15.1.0",
  "jsonrpc-server-utils",
  "log",
  "net2",
@@ -3272,7 +3715,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cf50e53e4eea8f421a7316c5f63e395f7bc7c4e786a6dc54d76fab6ff7aa7ce7"
 dependencies = [
- "jsonrpc-core",
+ "jsonrpc-core 15.1.0",
  "jsonrpc-server-utils",
  "log",
  "parity-tokio-ipc",
@@ -3282,11 +3725,24 @@
 
 [[package]]
 name = "jsonrpc-pubsub"
+version = "14.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d44f5602a11d657946aac09357956d2841299ed422035edf140c552cb057986"
+dependencies = [
+ "jsonrpc-core 14.2.0",
+ "log",
+ "parking_lot 0.10.2",
+ "rand 0.7.3",
+ "serde",
+]
+
+[[package]]
+name = "jsonrpc-pubsub"
 version = "15.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "639558e0604013be9787ae52f798506ae42bf4220fe587bdc5625871cc8b9c77"
 dependencies = [
- "jsonrpc-core",
+ "jsonrpc-core 15.1.0",
  "log",
  "parking_lot 0.10.2",
  "rand 0.7.3",
@@ -3301,7 +3757,7 @@
 dependencies = [
  "bytes 0.4.12",
  "globset",
- "jsonrpc-core",
+ "jsonrpc-core 15.1.0",
  "lazy_static",
  "log",
  "tokio 0.1.22",
@@ -3315,7 +3771,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6596fe75209b73a2a75ebe1dce4e60e03b88a2b25e8807b667597f6315150d22"
 dependencies = [
- "jsonrpc-core",
+ "jsonrpc-core 15.1.0",
  "jsonrpc-server-utils",
  "log",
  "parity-ws",
@@ -3339,7 +3795,7 @@
  "serde",
  "serde_json",
  "thiserror",
- "url 2.2.1",
+ "url 2.2.2",
 ]
 
 [[package]]
@@ -3404,7 +3860,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "beefy-primitives",
- "bitvec",
+ "bitvec 0.20.4",
  "frame-executive",
  "frame-support",
  "frame-system",
@@ -3446,7 +3902,7 @@
  "pallet-utility",
  "pallet-vesting",
  "pallet-xcm",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-primitives",
  "polkadot-runtime-common",
  "polkadot-runtime-parachains",
@@ -3509,9 +3965,9 @@
 
 [[package]]
 name = "kvdb-rocksdb"
-version = "0.11.0"
+version = "0.11.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34446c373ccc494c2124439281c198c7636ccdc2752c06722bbffd56d459c1e4"
+checksum = "94b27cdb788bf1c8ade782289f9dbee626940be2961fd75c7cde993fa2f1ded1"
 dependencies = [
  "fs-swap",
  "kvdb",
@@ -3545,9 +4001,9 @@
 
 [[package]]
 name = "libc"
-version = "0.2.93"
+version = "0.2.97"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9385f66bf6105b241aa65a61cb923ef20efc665cb9f9bb50ac2f0c4b7f378d41"
+checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6"
 
 [[package]]
 name = "libloading"
@@ -3560,6 +4016,16 @@
 ]
 
 [[package]]
+name = "libloading"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi 0.3.9",
+]
+
+[[package]]
 name = "libm"
 version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3573,7 +4039,7 @@
 dependencies = [
  "atomic",
  "bytes 1.0.1",
- "futures 0.3.14",
+ "futures 0.3.15",
  "lazy_static",
  "libp2p-core",
  "libp2p-deflate",
@@ -3599,23 +4065,23 @@
  "libp2p-yamux",
  "parity-multiaddr",
  "parking_lot 0.11.1",
- "pin-project 1.0.6",
+ "pin-project 1.0.7",
  "smallvec 1.6.1",
  "wasm-timer",
 ]
 
 [[package]]
 name = "libp2p-core"
-version = "0.28.2"
+version = "0.28.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71dd51b562e14846e65bad00e5808d0644376e6588668c490d3c48e1dfeb4a9a"
+checksum = "554d3e7e9e65f939d66b75fd6a4c67f258fe250da61b91f46c545fc4a89b51d9"
 dependencies = [
  "asn1_der",
  "bs58",
  "ed25519-dalek",
  "either",
  "fnv",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "lazy_static",
  "libsecp256k1",
@@ -3624,13 +4090,13 @@
  "multistream-select",
  "parity-multiaddr",
  "parking_lot 0.11.1",
- "pin-project 1.0.6",
+ "pin-project 1.0.7",
  "prost",
  "prost-build",
  "rand 0.7.3",
  "ring",
  "rw-stream-sink",
- "sha2 0.9.3",
+ "sha2 0.9.5",
  "smallvec 1.6.1",
  "thiserror",
  "unsigned-varint 0.7.0",
@@ -3645,7 +4111,7 @@
 checksum = "a2181a641cd15f9b6ba71b1335800f309012a0a97a29ffaabbbf40e9d3d58f08"
 dependencies = [
  "flate2",
- "futures 0.3.14",
+ "futures 0.3.15",
  "libp2p-core",
 ]
 
@@ -3656,7 +4122,7 @@
 checksum = "62e63dab8b5ff35e0c101a3e51e843ba782c07bbb1682f5fd827622e0d02b98b"
 dependencies = [
  "async-std-resolver",
- "futures 0.3.14",
+ "futures 0.3.15",
  "libp2p-core",
  "log",
  "smallvec 1.6.1",
@@ -3671,7 +4137,7 @@
 dependencies = [
  "cuckoofilter",
  "fnv",
- "futures 0.3.14",
+ "futures 0.3.15",
  "libp2p-core",
  "libp2p-swarm",
  "log",
@@ -3692,7 +4158,7 @@
  "byteorder",
  "bytes 1.0.1",
  "fnv",
- "futures 0.3.14",
+ "futures 0.3.15",
  "hex_fmt",
  "libp2p-core",
  "libp2p-swarm",
@@ -3701,7 +4167,7 @@
  "prost-build",
  "rand 0.7.3",
  "regex",
- "sha2 0.9.3",
+ "sha2 0.9.5",
  "smallvec 1.6.1",
  "unsigned-varint 0.7.0",
  "wasm-timer",
@@ -3713,7 +4179,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5f668f00efd9883e8b7bcc582eaf0164615792608f886f6577da18bcbeea0a46"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "libp2p-core",
  "libp2p-swarm",
  "log",
@@ -3734,16 +4200,16 @@
  "bytes 1.0.1",
  "either",
  "fnv",
- "futures 0.3.14",
+ "futures 0.3.15",
  "libp2p-core",
  "libp2p-swarm",
  "log",
  "prost",
  "prost-build",
  "rand 0.7.3",
- "sha2 0.9.3",
+ "sha2 0.9.5",
  "smallvec 1.6.1",
- "uint",
+ "uint 0.9.0",
  "unsigned-varint 0.7.0",
  "void",
  "wasm-timer",
@@ -3751,20 +4217,20 @@
 
 [[package]]
 name = "libp2p-mdns"
-version = "0.30.1"
+version = "0.30.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41e282f974c4bea56db8acca50387f05189406e346318cb30190b0bde662961e"
+checksum = "4efa70c1c3d2d91237f8546e27aeb85e287d62c066a7b4f3ea6a696d43ced714"
 dependencies = [
  "async-io",
  "data-encoding",
  "dns-parser",
- "futures 0.3.14",
+ "futures 0.3.15",
  "if-watch",
  "lazy_static",
  "libp2p-core",
  "libp2p-swarm",
  "log",
- "rand 0.8.3",
+ "rand 0.8.4",
  "smallvec 1.6.1",
  "socket2 0.4.0",
  "void",
@@ -3778,7 +4244,7 @@
 dependencies = [
  "asynchronous-codec 0.6.0",
  "bytes 1.0.1",
- "futures 0.3.14",
+ "futures 0.3.15",
  "libp2p-core",
  "log",
  "nohash-hasher",
@@ -3796,14 +4262,14 @@
 dependencies = [
  "bytes 1.0.1",
  "curve25519-dalek 3.1.0",
- "futures 0.3.14",
+ "futures 0.3.15",
  "lazy_static",
  "libp2p-core",
  "log",
  "prost",
  "prost-build",
  "rand 0.7.3",
- "sha2 0.9.3",
+ "sha2 0.9.5",
  "snow",
  "static_assertions",
  "x25519-dalek",
@@ -3816,7 +4282,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "bf4bfaffac63bf3c7ec11ed9d8879d455966ddea7e78ee14737f0b6dce0d1cd1"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "libp2p-core",
  "libp2p-swarm",
  "log",
@@ -3833,7 +4299,7 @@
 dependencies = [
  "asynchronous-codec 0.6.0",
  "bytes 1.0.1",
- "futures 0.3.14",
+ "futures 0.3.15",
  "libp2p-core",
  "log",
  "prost",
@@ -3848,12 +4314,12 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6ce3374f3b28162db9d3442c9347c4f14cb01e8290052615c7d341d40eae0599"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "log",
- "pin-project 1.0.6",
+ "pin-project 1.0.7",
  "rand 0.7.3",
  "salsa20",
- "sha3",
+ "sha3 0.9.1",
 ]
 
 [[package]]
@@ -3864,12 +4330,12 @@
 dependencies = [
  "asynchronous-codec 0.6.0",
  "bytes 1.0.1",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "libp2p-core",
  "libp2p-swarm",
  "log",
- "pin-project 1.0.6",
+ "pin-project 1.0.7",
  "prost",
  "prost-build",
  "rand 0.7.3",
@@ -3887,7 +4353,7 @@
 dependencies = [
  "async-trait",
  "bytes 1.0.1",
- "futures 0.3.14",
+ "futures 0.3.15",
  "libp2p-core",
  "libp2p-swarm",
  "log",
@@ -3906,7 +4372,7 @@
 checksum = "1e04d8e1eef675029ec728ba14e8d0da7975d84b6679b699b4ae91a1de9c3a92"
 dependencies = [
  "either",
- "futures 0.3.14",
+ "futures 0.3.15",
  "libp2p-core",
  "log",
  "rand 0.7.3",
@@ -3932,7 +4398,7 @@
 checksum = "2b1a27d21c477951799e99d5c105d78868258502ce092988040a808d5a19bbd9"
 dependencies = [
  "async-io",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "if-watch",
  "ipnet",
@@ -3949,18 +4415,18 @@
 checksum = "ffd6564bb3b7ff203661ccbb69003c2b551e34cef974f2d6c6a28306a12170b5"
 dependencies = [
  "async-std",
- "futures 0.3.14",
+ "futures 0.3.15",
  "libp2p-core",
  "log",
 ]
 
 [[package]]
 name = "libp2p-wasm-ext"
-version = "0.28.1"
+version = "0.28.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cef45d61e43c313531b5e903e4e8415212ff6338e0c54c47da5b9b412b5760de"
+checksum = "e2d413e4cf9b8e5dfbcd2a60d3dc5a3391308bdb463684093d4f67137b7113de"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "js-sys",
  "libp2p-core",
  "parity-send-wrapper",
@@ -3975,14 +4441,14 @@
 checksum = "cace60995ef6f637e4752cccbb2590f6bc358e8741a0d066307636c69a4b3a74"
 dependencies = [
  "either",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-rustls",
  "libp2p-core",
  "log",
  "quicksink",
  "rw-stream-sink",
  "soketto",
- "url 2.2.1",
+ "url 2.2.2",
  "webpki-roots",
 ]
 
@@ -3992,7 +4458,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f35da42cfc6d5cb0dcf3ad6881bc68d146cdf38f98655e09e33fbba4d13eabc4"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "libp2p-core",
  "parking_lot 0.11.1",
  "thiserror",
@@ -4001,9 +4467,9 @@
 
 [[package]]
 name = "librocksdb-sys"
-version = "6.11.4"
+version = "6.17.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb5b56f651c204634b936be2f92dbb42c36867e00ff7fe2405591f3b9fa66f09"
+checksum = "5da125e1c0f22c7cae785982115523a0738728498547f415c9054cb17c7e89f9"
 dependencies = [
  "bindgen",
  "cc",
@@ -4029,9 +4495,9 @@
 
 [[package]]
 name = "libz-sys"
-version = "1.1.2"
+version = "1.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "602113192b08db8f38796c4e85c39e960c145965140e918018bcde1952429655"
+checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66"
 dependencies = [
  "cc",
  "pkg-config",
@@ -4055,11 +4521,11 @@
 
 [[package]]
 name = "linregress"
-version = "0.4.1"
+version = "0.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b36162d2e1dcbdeb61223cb788f029f8ac9f2ab19969b89c5a8f4517aad4d940"
+checksum = "b1ff7f341d23e1275eec0656a9a07225fcc86216c4322392868adffe59023d1a"
 dependencies = [
- "nalgebra 0.25.4",
+ "nalgebra 0.27.1",
  "statrs",
 ]
 
@@ -4074,9 +4540,9 @@
 
 [[package]]
 name = "lock_api"
-version = "0.4.3"
+version = "0.4.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a3c91c24eae6777794bb1997ad98bbb87daf92890acab859f7eaa4320333176"
+checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb"
 dependencies = [
  "scopeguard",
 ]
@@ -4147,15 +4613,6 @@
 
 [[package]]
 name = "matrixmultiply"
-version = "0.2.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "916806ba0031cd542105d916a97c8572e1fa6dd79c9c51e7eb43a09ec2dd84c1"
-dependencies = [
- "rawpointer",
-]
-
-[[package]]
-name = "matrixmultiply"
 version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5a8a15b776d9dfaecd44b03c5828c2199cddff5247215858aac14624f8d6b741"
@@ -4171,15 +4628,15 @@
 
 [[package]]
 name = "memchr"
-version = "2.3.4"
+version = "2.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
+checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
 
 [[package]]
 name = "memmap2"
-version = "0.2.2"
+version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "397d1a6d6d0563c0f5462bbdae662cf6c784edf5e828e40c7257f85d82bf56dd"
+checksum = "723e3ebdcdc5c023db1df315364573789f8857c11b631a2fdfad7c00f5c046b4"
 dependencies = [
  "libc",
 ]
@@ -4195,9 +4652,9 @@
 
 [[package]]
 name = "memoffset"
-version = "0.6.3"
+version = "0.6.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f83fb6581e8ed1f85fd45c116db8405483899489e38406156c25eb743554361d"
+checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9"
 dependencies = [
  "autocfg",
 ]
@@ -4246,7 +4703,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "derive_more",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
 ]
 
@@ -4256,7 +4713,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c023c3f16109e7f33aa451f773fd61070e265b4977d0b6e344a51049296dd7df"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "rand 0.7.3",
  "thrift",
 ]
@@ -4395,18 +4852,18 @@
  "digest 0.9.0",
  "generic-array 0.14.4",
  "multihash-derive",
- "sha2 0.9.3",
- "sha3",
+ "sha2 0.9.5",
+ "sha3 0.9.1",
  "unsigned-varint 0.5.1",
 ]
 
 [[package]]
 name = "multihash-derive"
-version = "0.7.1"
+version = "0.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85ee3c48cb9d9b275ad967a0e96715badc13c6029adb92f34fa17b9ff28fd81f"
+checksum = "424f6e86263cd5294cbd7f1e95746b95aca0e0d66bff31e5a40d6baa87b4aa99"
 dependencies = [
- "proc-macro-crate 0.1.5",
+ "proc-macro-crate 1.0.0",
  "proc-macro-error",
  "proc-macro2",
  "quote",
@@ -4427,65 +4884,64 @@
 checksum = "7d91ec0a2440aaff5f78ec35631a7027d50386c6163aa975f7caa0d5da4b6ff8"
 dependencies = [
  "bytes 1.0.1",
- "futures 0.3.14",
+ "futures 0.3.15",
  "log",
- "pin-project 1.0.6",
+ "pin-project 1.0.7",
  "smallvec 1.6.1",
  "unsigned-varint 0.7.0",
 ]
 
 [[package]]
 name = "nalgebra"
-version = "0.19.0"
+version = "0.26.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0abb021006c01b126a936a8dd1351e0720d83995f4fc942d0d426c654f990745"
+checksum = "476d1d59fe02fe54c86356e91650cd892f392782a1cb9fc524ec84f7aa9e1d06"
 dependencies = [
- "alga",
- "approx 0.3.2",
- "generic-array 0.13.3",
- "matrixmultiply 0.2.4",
- "num-complex 0.2.4",
- "num-rational 0.2.4",
+ "approx 0.4.0",
+ "matrixmultiply",
+ "num-complex 0.3.1",
+ "num-rational 0.3.2",
  "num-traits",
- "rand 0.7.3",
+ "rand 0.8.4",
  "rand_distr",
+ "simba 0.4.0",
  "typenum",
 ]
 
 [[package]]
 name = "nalgebra"
-version = "0.25.4"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c70c9e8c5f213c8e93fc8c112ade4edd3ee62062fb897776c23dcebac7932900"
+checksum = "462fffe4002f4f2e1f6a9dcf12cc1a6fc0e15989014efc02a941d3e0f5dc2120"
 dependencies = [
- "approx 0.4.0",
- "generic-array 0.14.4",
- "matrixmultiply 0.3.1",
- "num-complex 0.3.1",
- "num-rational 0.3.2",
+ "approx 0.5.0",
+ "matrixmultiply",
+ "nalgebra-macros",
+ "num-complex 0.4.0",
+ "num-rational 0.4.0",
  "num-traits",
- "serde",
- "simba",
+ "simba 0.5.1",
  "typenum",
 ]
 
 [[package]]
-name = "names"
-version = "0.11.0"
+name = "nalgebra-macros"
+version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef320dab323286b50fb5cdda23f61c796a72a89998ab565ca32525c5c556f2da"
+checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218"
 dependencies = [
- "rand 0.3.23",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
-name = "nb-connect"
-version = "1.1.0"
+name = "names"
+version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a19900e7eee95eb2b3c2e26d12a874cc80aaf750e31be6fcbe743ead369fa45d"
+checksum = "ef320dab323286b50fb5cdda23f61c796a72a89998ab565ca32525c5c556f2da"
 dependencies = [
- "libc",
- "socket2 0.4.0",
+ "rand 0.3.23",
 ]
 
 [[package]]
@@ -4511,18 +4967,27 @@
  "cumulus-client-service",
  "cumulus-primitives-core",
  "cumulus-primitives-parachain-inherent",
+ "fc-consensus",
+ "fc-db",
+ "fc-mapping-sync",
+ "fc-rpc",
+ "fc-rpc-core",
  "flexi_logger",
+ "fp-rpc",
  "frame-benchmarking",
  "frame-benchmarking-cli",
- "futures 0.3.14",
- "jsonrpc-core",
+ "futures 0.3.15",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-pubsub 15.1.0",
  "log",
  "nft-data-structs",
+ "nft-rpc",
  "nft-runtime",
  "pallet-contracts",
  "pallet-contracts-rpc",
+ "pallet-ethereum",
  "pallet-transaction-payment-rpc",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.10.2",
  "polkadot-cli",
  "polkadot-parachain",
@@ -4575,13 +5040,58 @@
  "frame-support",
  "frame-system",
  "pallet-contracts",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-core",
  "sp-runtime",
 ]
 
 [[package]]
+name = "nft-rpc"
+version = "3.3.1"
+dependencies = [
+ "fc-db",
+ "fc-mapping-sync",
+ "fc-rpc",
+ "fc-rpc-core",
+ "fp-rpc",
+ "futures 0.3.15",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-pubsub 15.1.0",
+ "nft-runtime",
+ "pallet-contracts-rpc",
+ "pallet-ethereum",
+ "pallet-nft",
+ "pallet-transaction-payment-rpc",
+ "pallet-transaction-payment-rpc-runtime-api",
+ "sc-client-api",
+ "sc-consensus-aura",
+ "sc-consensus-epochs",
+ "sc-finality-grandpa",
+ "sc-finality-grandpa-rpc",
+ "sc-keystore",
+ "sc-network",
+ "sc-rpc",
+ "sc-rpc-api",
+ "sc-service",
+ "sc-transaction-graph",
+ "sc-transaction-pool",
+ "sp-api",
+ "sp-block-builder",
+ "sp-blockchain",
+ "sp-consensus",
+ "sp-consensus-aura",
+ "sp-core",
+ "sp-offchain",
+ "sp-runtime",
+ "sp-session",
+ "sp-storage",
+ "sp-transaction-pool",
+ "substrate-frame-rpc-system",
+ "tokio 0.2.25",
+]
+
+[[package]]
 name = "nft-runtime"
 version = "3.0.0"
 dependencies = [
@@ -4592,6 +5102,7 @@
  "cumulus-pallet-xcmp-queue",
  "cumulus-primitives-core",
  "cumulus-primitives-utility",
+ "fp-rpc",
  "frame-benchmarking",
  "frame-executive",
  "frame-support",
@@ -4605,6 +5116,8 @@
  "pallet-contracts",
  "pallet-contracts-primitives",
  "pallet-contracts-rpc-runtime-api",
+ "pallet-ethereum",
+ "pallet-evm",
  "pallet-inflation",
  "pallet-nft",
  "pallet-nft-charge-transaction",
@@ -4619,7 +5132,7 @@
  "pallet-vesting",
  "pallet-xcm",
  "parachain-info",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-parachain",
  "serde",
  "smallvec 1.6.1",
@@ -4677,19 +5190,18 @@
 
 [[package]]
 name = "num-complex"
-version = "0.2.4"
+version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"
+checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5"
 dependencies = [
- "autocfg",
  "num-traits",
 ]
 
 [[package]]
 name = "num-complex"
-version = "0.3.1"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5"
+checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085"
 dependencies = [
  "num-traits",
 ]
@@ -4728,6 +5240,17 @@
 ]
 
 [[package]]
+name = "num-rational"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
 name = "num-traits"
 version = "0.2.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4758,10 +5281,19 @@
 ]
 
 [[package]]
+name = "object"
+version = "0.25.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a38f2be3697a57b4060074ff41b44c16870d916ad7877c17696e063257482bc7"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
 name = "once_cell"
-version = "1.7.2"
+version = "1.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3"
+checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
 dependencies = [
  "parking_lot 0.11.1",
 ]
@@ -4780,9 +5312,9 @@
 
 [[package]]
 name = "openssl-probe"
-version = "0.1.2"
+version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
+checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a"
 
 [[package]]
 name = "ordered-float"
@@ -4811,7 +5343,7 @@
  "frame-system",
  "pallet-session",
  "pallet-timestamp",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-application-crypto",
  "sp-consensus-aura",
  "sp-runtime",
@@ -4826,7 +5358,7 @@
  "frame-support",
  "frame-system",
  "pallet-session",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-application-crypto",
  "sp-authority-discovery",
  "sp-runtime",
@@ -4840,8 +5372,8 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "impl-trait-for-tuples",
- "parity-scale-codec",
+ "impl-trait-for-tuples 0.2.1",
+ "parity-scale-codec 2.1.3",
  "sp-authorship",
  "sp-runtime",
  "sp-std",
@@ -4859,7 +5391,7 @@
  "pallet-authorship",
  "pallet-session",
  "pallet-timestamp",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-application-crypto",
  "sp-consensus-babe",
  "sp-consensus-vrf",
@@ -4879,7 +5411,7 @@
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-runtime",
  "sp-std",
 ]
@@ -4893,7 +5425,7 @@
  "frame-support",
  "frame-system",
  "pallet-session",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-runtime",
  "sp-std",
@@ -4907,7 +5439,7 @@
  "frame-support",
  "frame-system",
  "pallet-treasury",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-runtime",
  "sp-std",
 ]
@@ -4925,7 +5457,7 @@
  "frame-system",
  "log",
  "num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-finality-grandpa",
  "sp-runtime",
@@ -4941,7 +5473,7 @@
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -4958,7 +5490,7 @@
  "log",
  "pallet-contracts-primitives",
  "pallet-contracts-proc-macro",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parity-wasm 0.42.2",
  "pwasm-utils 0.17.1",
  "serde",
@@ -4977,7 +5509,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "bitflags",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-core",
  "sp-runtime",
@@ -4999,12 +5531,12 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "jsonrpc-core",
- "jsonrpc-core-client",
- "jsonrpc-derive",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-core-client 15.1.0",
+ "jsonrpc-derive 15.1.0",
  "pallet-contracts-primitives",
  "pallet-contracts-rpc-runtime-api",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-api",
  "sp-blockchain",
@@ -5019,7 +5551,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "pallet-contracts-primitives",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api",
  "sp-runtime",
  "sp-std",
@@ -5033,7 +5565,7 @@
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-io",
  "sp-runtime",
@@ -5049,7 +5581,7 @@
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-arithmetic",
  "sp-core",
  "sp-io",
@@ -5067,7 +5599,7 @@
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-io",
  "sp-npos-elections",
@@ -5076,6 +5608,60 @@
 ]
 
 [[package]]
+name = "pallet-ethereum"
+version = "2.0.0-dev"
+source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#48676fa655fdfb6ceb16fc67d7250d8e618a5843"
+dependencies = [
+ "ethereum",
+ "ethereum-types 0.11.0",
+ "evm",
+ "fp-consensus",
+ "fp-evm",
+ "fp-rpc",
+ "fp-storage",
+ "frame-support",
+ "frame-system",
+ "libsecp256k1",
+ "pallet-balances",
+ "pallet-evm",
+ "pallet-timestamp",
+ "parity-scale-codec 2.1.3",
+ "rlp 0.5.0",
+ "rustc-hex",
+ "serde",
+ "sha3 0.8.2",
+ "sp-io",
+ "sp-runtime",
+ "sp-std",
+]
+
+[[package]]
+name = "pallet-evm"
+version = "4.0.0-dev"
+source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#48676fa655fdfb6ceb16fc67d7250d8e618a5843"
+dependencies = [
+ "evm",
+ "evm-gasometer",
+ "evm-runtime",
+ "fp-evm",
+ "frame-support",
+ "frame-system",
+ "impl-trait-for-tuples 0.2.1",
+ "log",
+ "pallet-balances",
+ "pallet-timestamp",
+ "parity-scale-codec 2.1.3",
+ "primitive-types 0.9.0",
+ "rlp 0.5.0",
+ "serde",
+ "sha3 0.8.2",
+ "sp-core",
+ "sp-io",
+ "sp-runtime",
+ "sp-std",
+]
+
+[[package]]
 name = "pallet-gilt"
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
@@ -5083,7 +5669,7 @@
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-arithmetic",
  "sp-runtime",
  "sp-std",
@@ -5100,7 +5686,7 @@
  "log",
  "pallet-authorship",
  "pallet-session",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-application-crypto",
  "sp-core",
  "sp-finality-grandpa",
@@ -5119,7 +5705,7 @@
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-io",
  "sp-runtime",
  "sp-std",
@@ -5134,7 +5720,7 @@
  "frame-system",
  "log",
  "pallet-authorship",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-application-crypto",
  "sp-core",
  "sp-io",
@@ -5150,7 +5736,7 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-io",
  "sp-keyring",
@@ -5168,7 +5754,7 @@
  "pallet-balances",
  "pallet-randomness-collective-flip",
  "pallet-timestamp",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-core",
  "sp-io",
@@ -5185,7 +5771,7 @@
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-io",
  "sp-runtime",
  "sp-std",
@@ -5201,7 +5787,7 @@
  "frame-support",
  "frame-system",
  "pallet-mmr-primitives",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5216,7 +5802,7 @@
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-api",
  "sp-core",
@@ -5229,11 +5815,11 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "jsonrpc-core",
- "jsonrpc-core-client",
- "jsonrpc-derive",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-core-client 15.1.0",
+ "jsonrpc-derive 15.1.0",
  "pallet-mmr-primitives",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-api",
  "sp-blockchain",
@@ -5249,7 +5835,7 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5260,17 +5846,27 @@
 name = "pallet-nft"
 version = "3.0.0"
 dependencies = [
+ "ethereum",
+ "ethereum-tx-sign",
+ "evm-coder",
+ "fp-evm",
  "frame-benchmarking",
  "frame-support",
  "frame-system",
+ "hex-literal",
  "nft-data-structs",
  "pallet-balances",
  "pallet-contracts",
+ "pallet-ethereum",
+ "pallet-evm",
  "pallet-randomness-collective-flip",
  "pallet-timestamp",
  "pallet-transaction-payment",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
+ "primitive-types 0.9.0",
+ "rlp 0.5.0",
  "serde",
+ "sp-api",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5292,7 +5888,7 @@
  "pallet-randomness-collective-flip",
  "pallet-timestamp",
  "pallet-transaction-payment",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-core",
  "sp-io",
@@ -5314,7 +5910,7 @@
  "pallet-randomness-collective-flip",
  "pallet-timestamp",
  "pallet-transaction-payment",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-core",
  "sp-io",
@@ -5329,7 +5925,7 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-io",
  "sp-runtime",
  "sp-std",
@@ -5344,7 +5940,7 @@
  "frame-system",
  "log",
  "pallet-balances",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-runtime",
  "sp-staking",
@@ -5358,7 +5954,7 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5372,7 +5968,7 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "safe-mix",
  "sp-runtime",
  "sp-std",
@@ -5386,7 +5982,7 @@
  "enumflags2",
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-io",
  "sp-runtime",
  "sp-std",
@@ -5404,7 +6000,7 @@
  "pallet-contracts",
  "pallet-nft",
  "pallet-nft-transaction-payment",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-core",
  "sp-io",
@@ -5422,7 +6018,7 @@
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-io",
  "sp-runtime",
  "sp-std",
@@ -5435,9 +6031,9 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "impl-trait-for-tuples",
+ "impl-trait-for-tuples 0.2.1",
  "pallet-timestamp",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5454,7 +6050,7 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "rand_chacha 0.2.2",
  "sp-runtime",
  "sp-std",
@@ -5471,7 +6067,7 @@
  "log",
  "pallet-authorship",
  "pallet-session",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "paste",
  "serde",
  "sp-application-crypto",
@@ -5509,7 +6105,7 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-io",
  "sp-runtime",
  "sp-std",
@@ -5523,9 +6119,9 @@
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "impl-trait-for-tuples",
+ "impl-trait-for-tuples 0.2.1",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-inherents",
  "sp-io",
  "sp-runtime",
@@ -5541,7 +6137,7 @@
  "frame-support",
  "frame-system",
  "pallet-treasury",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-runtime",
  "sp-std",
@@ -5554,7 +6150,7 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "smallvec 1.6.1",
  "sp-core",
@@ -5568,11 +6164,11 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "jsonrpc-core",
- "jsonrpc-core-client",
- "jsonrpc-derive",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-core-client 15.1.0",
+ "jsonrpc-derive 15.1.0",
  "pallet-transaction-payment-rpc-runtime-api",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api",
  "sp-blockchain",
  "sp-core",
@@ -5586,7 +6182,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "pallet-transaction-payment",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api",
  "sp-runtime",
 ]
@@ -5598,9 +6194,9 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "impl-trait-for-tuples",
+ "impl-trait-for-tuples 0.2.1",
  "pallet-balances",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-runtime",
  "sp-std",
@@ -5613,7 +6209,7 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5628,7 +6224,7 @@
  "enumflags2",
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-runtime",
  "sp-std",
 ]
@@ -5640,7 +6236,7 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-runtime",
  "sp-std",
@@ -5656,15 +6252,15 @@
  "cumulus-primitives-core",
  "frame-support",
  "frame-system",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
 ]
 
 [[package]]
 name = "parity-db"
-version = "0.2.3"
+version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "495197c078e54b8735181aa35c00a327f7f3a3cc00a1ee8c95926dd010f0ec6b"
+checksum = "2e337f62db341435f0da05b8f6b97e984ef4ea5800510cd07c2d624688c40b47"
 dependencies = [
  "blake2-rfc",
  "crc32fast",
@@ -5674,7 +6270,7 @@
  "log",
  "memmap2",
  "parking_lot 0.11.1",
- "rand 0.8.3",
+ "rand 0.8.4",
 ]
 
 [[package]]
@@ -5692,29 +6288,41 @@
  "serde",
  "static_assertions",
  "unsigned-varint 0.7.0",
- "url 2.2.1",
+ "url 2.2.2",
+]
+
+[[package]]
+name = "parity-scale-codec"
+version = "1.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4b26b16c7687c3075982af47719e481815df30bc544f7a6690763a25ca16e9d"
+dependencies = [
+ "arrayvec 0.5.2",
+ "bitvec 0.17.4",
+ "byte-slice-cast 0.3.5",
+ "serde",
 ]
 
 [[package]]
 name = "parity-scale-codec"
-version = "2.1.1"
+version = "2.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0f518afaa5a47d0d6386229b0a6e01e86427291d643aa4cabb4992219f504f8"
+checksum = "b310f220c335f9df1b3d2e9fbe3890bbfeef5030dad771620f48c5c229877cd3"
 dependencies = [
- "arrayvec 0.7.0",
- "bitvec",
- "byte-slice-cast",
+ "arrayvec 0.7.1",
+ "bitvec 0.20.4",
+ "byte-slice-cast 1.0.0",
  "parity-scale-codec-derive",
  "serde",
 ]
 
 [[package]]
 name = "parity-scale-codec-derive"
-version = "2.1.0"
+version = "2.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f44c5f94427bd0b5076e8f7e15ca3f60a4d8ac0077e4793884e6fdfd8915344e"
+checksum = "81038e13ca2c32587201d544ea2e6b6c47120f1e4eae04478f9f60b6bcb89145"
 dependencies = [
- "proc-macro-crate 0.1.5",
+ "proc-macro-crate 1.0.0",
  "proc-macro2",
  "quote",
  "syn",
@@ -5752,13 +6360,13 @@
 checksum = "664a8c6b8e62d8f9f2f937e391982eb433ab285b4cd9545b342441e04a906e42"
 dependencies = [
  "cfg-if 1.0.0",
- "ethereum-types",
+ "ethereum-types 0.11.0",
  "hashbrown",
- "impl-trait-for-tuples",
+ "impl-trait-for-tuples 0.2.1",
  "lru",
  "parity-util-mem-derive",
  "parking_lot 0.11.1",
- "primitive-types",
+ "primitive-types 0.9.0",
  "smallvec 1.6.1",
  "winapi 0.3.9",
 ]
@@ -5810,7 +6418,7 @@
  "rand 0.7.3",
  "sha-1 0.8.2",
  "slab",
- "url 2.2.1",
+ "url 2.2.2",
 ]
 
 [[package]]
@@ -5847,7 +6455,7 @@
 checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
 dependencies = [
  "instant",
- "lock_api 0.4.3",
+ "lock_api 0.4.4",
  "parking_lot_core 0.8.3",
 ]
 
@@ -5889,7 +6497,7 @@
  "cfg-if 1.0.0",
  "instant",
  "libc",
- "redox_syscall 0.2.6",
+ "redox_syscall 0.2.9",
  "smallvec 1.6.1",
  "winapi 0.3.9",
 ]
@@ -6007,11 +6615,11 @@
 
 [[package]]
 name = "pin-project"
-version = "1.0.6"
+version = "1.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc174859768806e91ae575187ada95c91a29e96a98dc5d2cd9a1fed039501ba6"
+checksum = "c7509cc106041c40a4518d2af7a61530e1eed0e6285296a3d8c5472806ccc4a4"
 dependencies = [
- "pin-project-internal 1.0.6",
+ "pin-project-internal 1.0.7",
 ]
 
 [[package]]
@@ -6027,9 +6635,9 @@
 
 [[package]]
 name = "pin-project-internal"
-version = "1.0.6"
+version = "1.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a490329918e856ed1b083f244e3bfe2d8c4f336407e4ea9e1a9f479ff09049e5"
+checksum = "48c950132583b500556b1efd71d45b319029f2b71518d979fcc208e16b42426f"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -6071,7 +6679,7 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "polkadot-node-network-protocol",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -6085,7 +6693,7 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "polkadot-node-network-protocol",
  "polkadot-node-subsystem",
  "polkadot-node-subsystem-util",
@@ -6098,9 +6706,9 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "lru",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-erasure-coding",
  "polkadot-node-core-runtime-api",
  "polkadot-node-network-protocol",
@@ -6108,7 +6716,7 @@
  "polkadot-node-subsystem",
  "polkadot-node-subsystem-util",
  "polkadot-primitives",
- "rand 0.8.3",
+ "rand 0.8.4",
  "sp-application-crypto",
  "sp-core",
  "sp-keystore",
@@ -6121,16 +6729,16 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "lru",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-erasure-coding",
  "polkadot-node-network-protocol",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
  "polkadot-node-subsystem-util",
  "polkadot-primitives",
- "rand 0.8.3",
+ "rand 0.8.4",
  "thiserror",
  "tracing",
 ]
@@ -6141,7 +6749,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "frame-benchmarking-cli",
- "futures 0.3.14",
+ "futures 0.3.15",
  "log",
  "polkadot-node-core-pvf",
  "polkadot-service",
@@ -6161,7 +6769,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "always-assert",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "polkadot-node-network-protocol",
  "polkadot-node-primitives",
@@ -6180,7 +6788,7 @@
 version = "0.9.3"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parity-util-mem",
  "sp-core",
  "sp-runtime",
@@ -6192,7 +6800,7 @@
 version = "0.9.3"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-node-primitives",
  "polkadot-primitives",
  "reed-solomon-novelpoly",
@@ -6206,7 +6814,7 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "polkadot-node-network-protocol",
  "polkadot-node-subsystem",
  "polkadot-node-subsystem-util",
@@ -6222,8 +6830,8 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "async-trait",
- "futures 0.3.14",
- "parity-scale-codec",
+ "futures 0.3.15",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "polkadot-node-network-protocol",
  "polkadot-node-subsystem",
@@ -6241,8 +6849,8 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "futures 0.3.14",
- "parity-scale-codec",
+ "futures 0.3.15",
+ "parity-scale-codec 2.1.3",
  "polkadot-erasure-coding",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -6259,13 +6867,13 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "bitvec",
+ "bitvec 0.20.4",
  "derive_more",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "kvdb",
  "merlin",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-node-jaeger",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -6288,11 +6896,11 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "bitvec",
- "futures 0.3.14",
+ "bitvec 0.20.4",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "kvdb",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-erasure-coding",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -6308,8 +6916,8 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "bitvec",
- "futures 0.3.14",
+ "bitvec 0.20.4",
+ "futures 0.3.15",
  "polkadot-erasure-coding",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -6326,7 +6934,7 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "polkadot-node-subsystem",
  "polkadot-node-subsystem-util",
  "polkadot-primitives",
@@ -6341,7 +6949,7 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
  "polkadot-node-subsystem-util",
@@ -6357,8 +6965,8 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "async-trait",
- "futures 0.3.14",
- "parity-scale-codec",
+ "futures 0.3.15",
+ "parity-scale-codec 2.1.3",
  "polkadot-node-core-pvf",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -6374,7 +6982,7 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "polkadot-node-subsystem",
  "polkadot-node-subsystem-util",
  "polkadot-primitives",
@@ -6388,7 +6996,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "async-trait",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "polkadot-node-subsystem",
  "polkadot-overseer",
@@ -6405,8 +7013,8 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "bitvec",
- "futures 0.3.14",
+ "bitvec 0.20.4",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "polkadot-node-subsystem",
  "polkadot-node-subsystem-util",
@@ -6424,14 +7032,14 @@
  "assert_matches",
  "async-process",
  "async-std",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "libc",
- "parity-scale-codec",
- "pin-project 1.0.6",
+ "parity-scale-codec 2.1.3",
+ "pin-project 1.0.7",
  "polkadot-core-primitives",
  "polkadot-parachain",
- "rand 0.8.3",
+ "rand 0.8.4",
  "sc-executor",
  "sc-executor-common",
  "sc-executor-wasmtime",
@@ -6448,7 +7056,7 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "memory-lru",
  "parity-util-mem",
  "polkadot-node-subsystem",
@@ -6470,7 +7078,7 @@
  "lazy_static",
  "log",
  "mick-jaeger",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "polkadot-node-primitives",
  "polkadot-primitives",
@@ -6484,8 +7092,8 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "futures 0.3.14",
- "parity-scale-codec",
+ "futures 0.3.15",
+ "parity-scale-codec 2.1.3",
  "polkadot-node-jaeger",
  "polkadot-node-primitives",
  "polkadot-primitives",
@@ -6499,8 +7107,8 @@
 version = "0.1.0"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "futures 0.3.14",
- "parity-scale-codec",
+ "futures 0.3.15",
+ "parity-scale-codec 2.1.3",
  "polkadot-parachain",
  "polkadot-primitives",
  "polkadot-statement-table",
@@ -6524,14 +7132,14 @@
  "async-std",
  "async-trait",
  "derive_more",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "lazy_static",
  "log",
  "mick-jaeger",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
- "pin-project 1.0.6",
+ "pin-project 1.0.7",
  "polkadot-node-jaeger",
  "polkadot-node-network-protocol",
  "polkadot-node-primitives",
@@ -6552,18 +7160,18 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "async-trait",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "lru",
  "metered-channel",
- "parity-scale-codec",
- "pin-project 1.0.6",
+ "parity-scale-codec 2.1.3",
+ "pin-project 1.0.7",
  "polkadot-node-jaeger",
  "polkadot-node-network-protocol",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
  "polkadot-primitives",
- "rand 0.8.3",
+ "rand 0.8.4",
  "sc-network",
  "sp-application-crypto",
  "sp-core",
@@ -6580,7 +7188,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "async-trait",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -6598,7 +7206,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "derive_more",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parity-util-mem",
  "polkadot-core-primitives",
  "serde",
@@ -6612,10 +7220,10 @@
 version = "0.9.3"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "bitvec",
+ "bitvec 0.20.4",
  "frame-system",
  "hex-literal",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parity-util-mem",
  "polkadot-core-primitives",
  "polkadot-parachain",
@@ -6665,10 +7273,10 @@
 dependencies = [
  "beefy-gadget",
  "beefy-gadget-rpc",
- "jsonrpc-core",
+ "jsonrpc-core 15.1.0",
  "pallet-mmr-rpc",
  "pallet-transaction-payment-rpc",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-primitives",
  "sc-chain-spec",
  "sc-client-api",
@@ -6697,7 +7305,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "beefy-primitives",
- "bitvec",
+ "bitvec 0.20.4",
  "frame-executive",
  "frame-support",
  "frame-system",
@@ -6735,7 +7343,7 @@
  "pallet-treasury",
  "pallet-utility",
  "pallet-vesting",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-primitives",
  "polkadot-runtime-common",
  "rustc-hex",
@@ -6767,10 +7375,10 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "beefy-primitives",
- "bitvec",
+ "bitvec 0.20.4",
  "frame-support",
  "frame-system",
- "impl-trait-for-tuples",
+ "impl-trait-for-tuples 0.2.1",
  "libsecp256k1",
  "log",
  "pallet-authorship",
@@ -6784,7 +7392,7 @@
  "pallet-transaction-payment",
  "pallet-treasury",
  "pallet-vesting",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-primitives",
  "polkadot-runtime-parachains",
  "rustc-hex",
@@ -6808,7 +7416,7 @@
 version = "0.9.3"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "bitvec",
+ "bitvec 0.20.4",
  "derive_more",
  "frame-support",
  "frame-system",
@@ -6821,10 +7429,10 @@
  "pallet-staking",
  "pallet-timestamp",
  "pallet-vesting",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-primitives",
- "rand 0.8.3",
- "rand_chacha 0.3.0",
+ "rand 0.8.4",
+ "rand_chacha 0.3.1",
  "rustc-hex",
  "serde",
  "sp-api",
@@ -6849,7 +7457,7 @@
  "beefy-primitives",
  "frame-benchmarking",
  "frame-system-rpc-runtime-api",
- "futures 0.3.14",
+ "futures 0.3.15",
  "hex-literal",
  "kusama-runtime",
  "kvdb",
@@ -6938,9 +7546,9 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "arrayvec 0.5.2",
- "futures 0.3.14",
+ "futures 0.3.15",
  "indexmap",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-node-network-protocol",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -6958,7 +7566,7 @@
 version = "0.9.3"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-primitives",
  "sp-core",
 ]
@@ -6969,7 +7577,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "beefy-primitives",
- "bitvec",
+ "bitvec 0.20.4",
  "frame-election-provider-support",
  "frame-executive",
  "frame-support",
@@ -6994,7 +7602,7 @@
  "pallet-transaction-payment",
  "pallet-transaction-payment-rpc-runtime-api",
  "pallet-vesting",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-parachain",
  "polkadot-primitives",
  "polkadot-runtime-common",
@@ -7028,7 +7636,7 @@
  "frame-benchmarking",
  "frame-system",
  "futures 0.1.31",
- "futures 0.3.14",
+ "futures 0.3.15",
  "hex",
  "pallet-balances",
  "pallet-staking",
@@ -7043,7 +7651,7 @@
  "polkadot-runtime-parachains",
  "polkadot-service",
  "polkadot-test-runtime",
- "rand 0.8.3",
+ "rand 0.8.4",
  "sc-authority-discovery",
  "sc-chain-spec",
  "sc-cli",
@@ -7074,14 +7682,14 @@
 
 [[package]]
 name = "polling"
-version = "2.0.3"
+version = "2.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fc12d774e799ee9ebae13f4076ca003b40d18a11ac0f3641e6f899618580b7b"
+checksum = "92341d779fa34ea8437ef4d82d440d5e1ce3f3ff7f824aa64424cd481f9a1f25"
 dependencies = [
  "cfg-if 1.0.0",
  "libc",
  "log",
- "wepoll-sys",
+ "wepoll-ffi",
  "winapi 0.3.9",
 ]
 
@@ -7091,7 +7699,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4b7456bc1ad2d4cf82b3a016be4c2ac48daf11bf990c1603ebd447fe6f30fca8"
 dependencies = [
- "cpuid-bool 0.2.0",
+ "cpuid-bool",
  "universal-hash",
 ]
 
@@ -7101,7 +7709,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd"
 dependencies = [
- "cpuid-bool 0.2.0",
+ "cpuid-bool",
  "opaque-debug 0.3.0",
  "universal-hash",
 ]
@@ -7114,15 +7722,28 @@
 
 [[package]]
 name = "primitive-types"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7dd39dcacf71411ba488570da7bbc89b717225e46478b30ba99b92db6b149809"
+dependencies = [
+ "fixed-hash 0.6.1",
+ "impl-codec 0.4.2",
+ "impl-rlp 0.2.1",
+ "impl-serde",
+ "uint 0.8.5",
+]
+
+[[package]]
+name = "primitive-types"
 version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2415937401cb030a2a0a4d922483f945fa068f52a7dbb22ce0fe5f2b6f6adace"
 dependencies = [
- "fixed-hash",
- "impl-codec",
- "impl-rlp",
+ "fixed-hash 0.7.0",
+ "impl-codec 0.5.0",
+ "impl-rlp 0.3.0",
  "impl-serde",
- "uint",
+ "uint 0.9.0",
 ]
 
 [[package]]
@@ -7182,9 +7803,9 @@
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.26"
+version = "1.0.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec"
+checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038"
 dependencies = [
  "unicode-xid",
 ]
@@ -7228,7 +7849,7 @@
  "prost",
  "prost-types",
  "tempfile",
- "which 4.1.0",
+ "which",
 ]
 
 [[package]]
@@ -7256,9 +7877,9 @@
 
 [[package]]
 name = "psm"
-version = "0.1.12"
+version = "0.1.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3abf49e5417290756acfd26501536358560c4a5cc4a0934d390939acb3e7083a"
+checksum = "21ff0279b4a85e576b97e4a21d13e437ebcd56612706cde5d3f0d5c9399490c0"
 dependencies = [
  "cc",
 ]
@@ -7319,6 +7940,12 @@
 
 [[package]]
 name = "radium"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac"
+
+[[package]]
+name = "radium"
 version = "0.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb"
@@ -7362,14 +7989,14 @@
 
 [[package]]
 name = "rand"
-version = "0.8.3"
+version = "0.8.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8"
 dependencies = [
  "libc",
- "rand_chacha 0.3.0",
- "rand_core 0.6.2",
- "rand_hc 0.3.0",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.3",
+ "rand_hc 0.3.1",
 ]
 
 [[package]]
@@ -7384,12 +8011,12 @@
 
 [[package]]
 name = "rand_chacha"
-version = "0.3.0"
+version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
 dependencies = [
  "ppv-lite86",
- "rand_core 0.6.2",
+ "rand_core 0.6.3",
 ]
 
 [[package]]
@@ -7418,20 +8045,21 @@
 
 [[package]]
 name = "rand_core"
-version = "0.6.2"
+version = "0.6.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
 dependencies = [
- "getrandom 0.2.2",
+ "getrandom 0.2.3",
 ]
 
 [[package]]
 name = "rand_distr"
-version = "0.2.2"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96977acbdd3a6576fb1d27391900035bf3863d4a16422973a409b488cf29ffb2"
+checksum = "051b398806e42b9cd04ad9ec8f81e355d0a382c543ac6672c62f5a5b452ef142"
 dependencies = [
- "rand 0.7.3",
+ "num-traits",
+ "rand 0.8.4",
 ]
 
 [[package]]
@@ -7445,11 +8073,11 @@
 
 [[package]]
 name = "rand_hc"
-version = "0.3.0"
+version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7"
 dependencies = [
- "rand_core 0.6.2",
+ "rand_core 0.6.3",
 ]
 
 [[package]]
@@ -7469,9 +8097,9 @@
 
 [[package]]
 name = "rayon"
-version = "1.5.0"
+version = "1.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"
+checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90"
 dependencies = [
  "autocfg",
  "crossbeam-deque 0.8.0",
@@ -7481,13 +8109,13 @@
 
 [[package]]
 name = "rayon-core"
-version = "1.9.0"
+version = "1.9.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
+checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e"
 dependencies = [
  "crossbeam-channel",
  "crossbeam-deque 0.8.0",
- "crossbeam-utils 0.8.3",
+ "crossbeam-utils 0.8.5",
  "lazy_static",
  "num_cpus",
 ]
@@ -7509,32 +8137,21 @@
 
 [[package]]
 name = "redox_syscall"
-version = "0.2.6"
+version = "0.2.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8270314b5ccceb518e7e578952f0b72b88222d02e8f77f5ecf7abbb673539041"
+checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee"
 dependencies = [
  "bitflags",
 ]
 
 [[package]]
 name = "redox_users"
-version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"
-dependencies = [
- "getrandom 0.1.16",
- "redox_syscall 0.1.57",
- "rust-argon2",
-]
-
-[[package]]
-name = "redox_users"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
 dependencies = [
- "getrandom 0.2.2",
- "redox_syscall 0.2.6",
+ "getrandom 0.2.3",
+ "redox_syscall 0.2.9",
 ]
 
 [[package]]
@@ -7545,7 +8162,7 @@
 dependencies = [
  "derive_more",
  "fs-err",
- "itertools 0.10.0",
+ "itertools 0.10.1",
  "static_init",
  "thiserror",
 ]
@@ -7584,9 +8201,9 @@
 
 [[package]]
 name = "regex"
-version = "1.4.5"
+version = "1.5.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19"
+checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -7595,19 +8212,18 @@
 
 [[package]]
 name = "regex-automata"
-version = "0.1.9"
+version = "0.1.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
 dependencies = [
- "byteorder",
  "regex-syntax",
 ]
 
 [[package]]
 name = "regex-syntax"
-version = "0.6.23"
+version = "0.6.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548"
+checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
 
 [[package]]
 name = "region"
@@ -7626,12 +8242,12 @@
 version = "0.9.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "env_logger 0.8.3",
+ "env_logger 0.8.4",
  "hex-literal",
  "jsonrpsee-http-client",
  "jsonrpsee-proc-macros",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -7658,9 +8274,9 @@
 
 [[package]]
 name = "retain_mut"
-version = "0.1.2"
+version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53552c6c49e1e13f1a203ef0080ab3bbef0beb570a528993e83df057a9d9bba1"
+checksum = "e9c17925a9027d298a4603d286befe3f9dc0e8ed02523141914eb628798d6e5b"
 
 [[package]]
 name = "ring"
@@ -7679,6 +8295,15 @@
 
 [[package]]
 name = "rlp"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1190dcc8c3a512f1eef5d09bb8c84c7f39e1054e174d1795482e18f5272f2e73"
+dependencies = [
+ "rustc-hex",
+]
+
+[[package]]
+name = "rlp"
 version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e54369147e3e7796c9b885c7304db87ca3d09a0a98f72843d532868675bbfba8"
@@ -7688,10 +8313,21 @@
 ]
 
 [[package]]
+name = "rlp-derive"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
 name = "rocksdb"
-version = "0.15.0"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23d83c02c429044d58474eaf5ae31e062d0de894e21125b47437ec0edc1397e6"
+checksum = "c749134fda8bfc90d0de643d59bfc841dcb3ac8a1062e12b6754bd60235c48b3"
 dependencies = [
  "libc",
  "librocksdb-sys",
@@ -7735,7 +8371,7 @@
  "pallet-transaction-payment-rpc-runtime-api",
  "pallet-utility",
  "pallet-xcm",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-parachain",
  "polkadot-primitives",
  "polkadot-runtime-common",
@@ -7771,25 +8407,13 @@
 dependencies = [
  "libc",
  "winapi 0.3.9",
-]
-
-[[package]]
-name = "rust-argon2"
-version = "0.8.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb"
-dependencies = [
- "base64 0.13.0",
- "blake2b_simd",
- "constant_time_eq",
- "crossbeam-utils 0.8.3",
 ]
 
 [[package]]
 name = "rustc-demangle"
-version = "0.1.18"
+version = "0.1.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232"
+checksum = "410f7acf3cb3a44527c5d9546bad4bf4e6c460915d5f9f2fc524498bfe8f70ce"
 
 [[package]]
 name = "rustc-hash"
@@ -7827,9 +8451,9 @@
 
 [[package]]
 name = "rustls"
-version = "0.19.0"
+version = "0.19.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b"
+checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
 dependencies = [
  "base64 0.13.0",
  "log",
@@ -7866,7 +8490,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "pin-project 0.4.28",
  "static_assertions",
 ]
@@ -7912,12 +8536,12 @@
  "async-trait",
  "derive_more",
  "either",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "ip_network",
  "libp2p",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "prost",
  "prost-build",
  "rand 0.7.3",
@@ -7938,10 +8562,10 @@
 version = "0.9.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sc-block-builder",
  "sc-client-api",
  "sc-proposer-metrics",
@@ -7961,7 +8585,7 @@
 version = "0.9.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sc-client-api",
  "sp-api",
  "sp-block-builder",
@@ -7977,8 +8601,8 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "impl-trait-for-tuples",
- "parity-scale-codec",
+ "impl-trait-for-tuples 0.2.1",
+ "parity-scale-codec 2.1.3",
  "sc-chain-spec-derive",
  "sc-consensus-babe",
  "sc-consensus-epochs",
@@ -8011,12 +8635,12 @@
 dependencies = [
  "chrono",
  "fdlimit",
- "futures 0.3.14",
+ "futures 0.3.15",
  "hex",
  "libp2p",
  "log",
  "names",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "rand 0.7.3",
  "regex",
  "rpassword",
@@ -8049,12 +8673,12 @@
 dependencies = [
  "derive_more",
  "fnv",
- "futures 0.3.14",
+ "futures 0.3.15",
  "hash-db",
  "kvdb",
  "lazy_static",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "sc-executor",
  "sp-api",
@@ -8089,7 +8713,7 @@
  "linked-hash-map",
  "log",
  "parity-db",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parity-util-mem",
  "parking_lot 0.11.1",
  "sc-client-api",
@@ -8125,10 +8749,10 @@
 dependencies = [
  "async-trait",
  "derive_more",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sc-block-builder",
  "sc-client-api",
  "sc-consensus-slots",
@@ -8157,14 +8781,14 @@
  "async-trait",
  "derive_more",
  "fork-tree",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "log",
  "merlin",
  "num-bigint",
  "num-rational 0.2.4",
  "num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "pdqselect",
  "rand 0.7.3",
@@ -8201,10 +8825,10 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "derive_more",
- "futures 0.3.14",
- "jsonrpc-core",
- "jsonrpc-core-client",
- "jsonrpc-derive",
+ "futures 0.3.15",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-core-client 15.1.0",
+ "jsonrpc-derive 15.1.0",
  "sc-consensus-babe",
  "sc-consensus-epochs",
  "sc-rpc-api",
@@ -8225,7 +8849,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "fork-tree",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sc-client-api",
  "sc-consensus",
  "sp-blockchain",
@@ -8238,11 +8862,11 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "async-trait",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
- "impl-trait-for-tuples",
+ "impl-trait-for-tuples 0.2.1",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sc-client-api",
  "sc-telemetry",
  "sp-api",
@@ -8280,7 +8904,7 @@
  "lazy_static",
  "libsecp256k1",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parity-wasm 0.41.0",
  "parking_lot 0.11.1",
  "sc-executor-common",
@@ -8306,7 +8930,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "derive_more",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parity-wasm 0.41.0",
  "pwasm-utils 0.14.0",
  "sp-allocator",
@@ -8324,7 +8948,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sc-executor-common",
  "sp-allocator",
  "sp-core",
@@ -8339,7 +8963,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parity-wasm 0.41.0",
  "pwasm-utils 0.14.0",
  "sc-executor-common",
@@ -8361,13 +8985,13 @@
  "dyn-clone",
  "finality-grandpa",
  "fork-tree",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "linked-hash-map",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
- "pin-project 1.0.6",
+ "pin-project 1.0.7",
  "rand 0.7.3",
  "sc-block-builder",
  "sc-client-api",
@@ -8398,13 +9022,13 @@
 dependencies = [
  "derive_more",
  "finality-grandpa",
- "futures 0.3.14",
- "jsonrpc-core",
- "jsonrpc-core-client",
- "jsonrpc-derive",
- "jsonrpc-pubsub",
+ "futures 0.3.15",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-core-client 15.1.0",
+ "jsonrpc-derive 15.1.0",
+ "jsonrpc-pubsub 15.1.0",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sc-client-api",
  "sc-finality-grandpa",
  "sc-rpc",
@@ -8421,10 +9045,10 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "derive_more",
- "futures 0.3.14",
+ "futures 0.3.15",
  "log",
  "num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "prost",
  "sc-client-api",
@@ -8442,7 +9066,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "ansi_term 0.12.1",
- "futures 0.3.14",
+ "futures 0.3.15",
  "log",
  "parity-util-mem",
  "sc-client-api",
@@ -8461,7 +9085,7 @@
 dependencies = [
  "async-trait",
  "derive_more",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-util",
  "hex",
  "merlin",
@@ -8481,7 +9105,7 @@
 dependencies = [
  "hash-db",
  "lazy_static",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "sc-client-api",
  "sc-executor",
@@ -8510,7 +9134,7 @@
  "erased-serde",
  "fnv",
  "fork-tree",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "hex",
  "ip_network",
@@ -8520,9 +9144,9 @@
  "log",
  "lru",
  "nohash-hasher",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
- "pin-project 1.0.6",
+ "pin-project 1.0.7",
  "prost",
  "prost-build",
  "rand 0.7.3",
@@ -8551,7 +9175,7 @@
 version = "0.9.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "libp2p",
  "log",
@@ -8570,14 +9194,14 @@
 dependencies = [
  "bytes 0.5.6",
  "fnv",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "hex",
  "hyper 0.13.10",
  "hyper-rustls",
  "log",
  "num_cpus",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "rand 0.7.3",
  "sc-client-api",
@@ -8596,7 +9220,7 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "libp2p",
  "log",
  "serde_json",
@@ -8618,12 +9242,12 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "hash-db",
- "jsonrpc-core",
- "jsonrpc-pubsub",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-pubsub 15.1.0",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "sc-block-builder",
  "sc-client-api",
@@ -8654,13 +9278,13 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "derive_more",
- "futures 0.3.14",
- "jsonrpc-core",
- "jsonrpc-core-client",
- "jsonrpc-derive",
- "jsonrpc-pubsub",
+ "futures 0.3.15",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-core-client 15.1.0",
+ "jsonrpc-derive 15.1.0",
+ "jsonrpc-pubsub 15.1.0",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "serde",
  "serde_json",
@@ -8679,10 +9303,10 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "futures 0.1.31",
- "jsonrpc-core",
+ "jsonrpc-core 15.1.0",
  "jsonrpc-http-server",
  "jsonrpc-ipc-server",
- "jsonrpc-pubsub",
+ "jsonrpc-pubsub 15.1.0",
  "jsonrpc-ws-server",
  "log",
  "serde",
@@ -8700,17 +9324,17 @@
  "directories",
  "exit-future",
  "futures 0.1.31",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "hash-db",
- "jsonrpc-core",
- "jsonrpc-pubsub",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-pubsub 15.1.0",
  "lazy_static",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parity-util-mem",
  "parking_lot 0.11.1",
- "pin-project 1.0.6",
+ "pin-project 1.0.7",
  "rand 0.7.3",
  "sc-block-builder",
  "sc-chain-spec",
@@ -8761,7 +9385,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parity-util-mem",
  "parity-util-mem-derive",
  "parking_lot 0.11.1",
@@ -8775,9 +9399,9 @@
 version = "0.9.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "jsonrpc-core",
- "jsonrpc-core-client",
- "jsonrpc-derive",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-core-client 15.1.0",
+ "jsonrpc-derive 15.1.0",
  "sc-chain-spec",
  "sc-client-api",
  "sc-consensus-babe",
@@ -8796,11 +9420,11 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "chrono",
- "futures 0.3.14",
+ "futures 0.3.15",
  "libp2p",
  "log",
  "parking_lot 0.11.1",
- "pin-project 1.0.6",
+ "pin-project 1.0.7",
  "rand 0.7.3",
  "serde",
  "serde_json",
@@ -8864,7 +9488,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "derive_more",
- "futures 0.3.14",
+ "futures 0.3.15",
  "linked-hash-map",
  "log",
  "parity-util-mem",
@@ -8885,11 +9509,11 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-diagnose",
  "intervalier",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parity-util-mem",
  "parking_lot 0.11.1",
  "sc-client-api",
@@ -8978,6 +9602,24 @@
 ]
 
 [[package]]
+name = "secp256k1"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6179428c22c73ac0fbb7b5579a56353ce78ba29759b3b8575183336ea74cdfb"
+dependencies = [
+ "secp256k1-sys",
+]
+
+[[package]]
+name = "secp256k1-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11553d210db090930f4432bea123b31f70bbf693ace14504ea2a35e796c28dd2"
+dependencies = [
+ "cc",
+]
+
+[[package]]
 name = "secrecy"
 version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -9054,18 +9696,18 @@
 
 [[package]]
 name = "serde"
-version = "1.0.125"
+version = "1.0.126"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171"
+checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.125"
+version = "1.0.126"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d"
+checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -9097,13 +9739,13 @@
 
 [[package]]
 name = "sha-1"
-version = "0.9.4"
+version = "0.9.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfebf75d25bd900fd1e7d11501efab59bc846dbc76196839663e6637bba9f25f"
+checksum = "8c4cfa741c5832d0ef7fab46cabed29c2aae926db0b11bb2069edd8db5e64e16"
 dependencies = [
  "block-buffer 0.9.0",
  "cfg-if 1.0.0",
- "cpuid-bool 0.1.2",
+ "cpufeatures",
  "digest 0.9.0",
  "opaque-debug 0.3.0",
 ]
@@ -9122,19 +9764,32 @@
 
 [[package]]
 name = "sha2"
-version = "0.9.3"
+version = "0.9.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa827a14b29ab7f44778d14a88d3cb76e949c45083f7dbfa507d0cb699dc12de"
+checksum = "b362ae5752fd2137731f9fa25fd4d9058af34666ca1966fb969119cc35719f12"
 dependencies = [
  "block-buffer 0.9.0",
  "cfg-if 1.0.0",
- "cpuid-bool 0.1.2",
+ "cpufeatures",
  "digest 0.9.0",
  "opaque-debug 0.3.0",
 ]
 
 [[package]]
 name = "sha3"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd26bc0e7a2e3a7c959bc494caf58b72ee0c71d67704e9520f736ca7e4853ecf"
+dependencies = [
+ "block-buffer 0.7.3",
+ "byte-tools",
+ "digest 0.8.1",
+ "keccak",
+ "opaque-debug 0.2.3",
+]
+
+[[package]]
+name = "sha3"
 version = "0.9.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809"
@@ -9162,9 +9817,9 @@
 
 [[package]]
 name = "signal-hook"
-version = "0.3.8"
+version = "0.3.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef33d6d0cd06e0840fba9985aab098c147e67e05cee14d412d3345ed14ff30ac"
+checksum = "470c5a6397076fae0094aaf06a08e6ba6f37acb77d3b1b91ea92b4d6c8650c39"
 dependencies = [
  "libc",
  "signal-hook-registry",
@@ -9172,9 +9827,9 @@
 
 [[package]]
 name = "signal-hook-registry"
-version = "1.3.0"
+version = "1.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16f1d0fef1604ba8f7a073c7e701f213e056707210e9020af4528e0101ce11a6"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
 dependencies = [
  "libc",
 ]
@@ -9198,10 +9853,22 @@
 ]
 
 [[package]]
+name = "simba"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e82063457853d00243beda9952e910b82593e4b07ae9f721b9278a99a0d3d5c"
+dependencies = [
+ "approx 0.5.0",
+ "num-complex 0.4.0",
+ "num-traits",
+ "paste",
+]
+
+[[package]]
 name = "slab"
-version = "0.4.2"
+version = "0.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
+checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527"
 
 [[package]]
 name = "slog"
@@ -9218,7 +9885,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "enumn",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "paste",
  "sp-runtime",
  "sp-std",
@@ -9261,7 +9928,7 @@
  "rand_core 0.5.1",
  "ring",
  "rustc_version",
- "sha2 0.9.3",
+ "sha2 0.9.5",
  "subtle 2.4.0",
  "x25519-dalek",
 ]
@@ -9296,11 +9963,11 @@
  "base64 0.12.3",
  "bytes 0.5.6",
  "flate2",
- "futures 0.3.14",
+ "futures 0.3.15",
  "httparse",
  "log",
  "rand 0.7.3",
- "sha-1 0.9.4",
+ "sha-1 0.9.6",
 ]
 
 [[package]]
@@ -9322,7 +9989,7 @@
 dependencies = [
  "hash-db",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api-proc-macro",
  "sp-core",
  "sp-runtime",
@@ -9349,7 +10016,7 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-core",
  "sp-io",
@@ -9363,7 +10030,7 @@
 dependencies = [
  "integer-sqrt",
  "num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-debug-derive",
  "sp-std",
@@ -9375,7 +10042,7 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api",
  "sp-application-crypto",
  "sp-runtime",
@@ -9388,7 +10055,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "async-trait",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-inherents",
  "sp-runtime",
  "sp-std",
@@ -9399,7 +10066,7 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api",
  "sp-inherents",
  "sp-runtime",
@@ -9411,10 +10078,10 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "log",
  "lru",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "sp-api",
  "sp-consensus",
@@ -9439,11 +10106,11 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "async-trait",
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-timer 3.0.2",
  "libp2p",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "serde",
  "sp-api",
@@ -9466,7 +10133,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "async-trait",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api",
  "sp-application-crypto",
  "sp-consensus",
@@ -9484,7 +10151,7 @@
 dependencies = [
  "async-trait",
  "merlin",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-api",
  "sp-application-crypto",
@@ -9504,7 +10171,7 @@
 version = "0.9.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-arithmetic",
  "sp-runtime",
 ]
@@ -9514,7 +10181,7 @@
 version = "0.9.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "schnorrkel",
  "sp-core",
  "sp-runtime",
@@ -9531,7 +10198,7 @@
  "byteorder",
  "dyn-clonable",
  "ed25519-dalek",
- "futures 0.3.14",
+ "futures 0.3.15",
  "hash-db",
  "hash256-std-hasher",
  "hex",
@@ -9541,16 +10208,16 @@
  "log",
  "merlin",
  "num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parity-util-mem",
  "parking_lot 0.11.1",
- "primitive-types",
+ "primitive-types 0.9.0",
  "rand 0.7.3",
  "regex",
  "schnorrkel",
  "secrecy",
  "serde",
- "sha2 0.9.3",
+ "sha2 0.9.5",
  "sp-debug-derive",
  "sp-externalities",
  "sp-runtime-interface",
@@ -9590,7 +10257,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "environmental",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-std",
  "sp-storage",
 ]
@@ -9602,7 +10269,7 @@
 dependencies = [
  "finality-grandpa",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-api",
  "sp-application-crypto",
@@ -9618,8 +10285,8 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "async-trait",
- "impl-trait-for-tuples",
- "parity-scale-codec",
+ "impl-trait-for-tuples 0.2.1",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-runtime",
  "sp-std",
@@ -9631,11 +10298,11 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "hash-db",
  "libsecp256k1",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "sp-core",
  "sp-externalities",
@@ -9669,9 +10336,9 @@
 dependencies = [
  "async-trait",
  "derive_more",
- "futures 0.3.14",
+ "futures 0.3.15",
  "merlin",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "schnorrkel",
  "serde",
@@ -9693,7 +10360,7 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-arithmetic",
  "sp-core",
@@ -9748,9 +10415,9 @@
 dependencies = [
  "either",
  "hash256-std-hasher",
- "impl-trait-for-tuples",
+ "impl-trait-for-tuples 0.2.1",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parity-util-mem",
  "paste",
  "rand 0.7.3",
@@ -9767,9 +10434,9 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "impl-trait-for-tuples",
- "parity-scale-codec",
- "primitive-types",
+ "impl-trait-for-tuples 0.2.1",
+ "parity-scale-codec 2.1.3",
+ "primitive-types 0.9.0",
  "sp-externalities",
  "sp-runtime-interface-proc-macro",
  "sp-std",
@@ -9796,7 +10463,7 @@
 version = "0.9.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-io",
  "sp-std",
@@ -9818,7 +10485,7 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api",
  "sp-core",
  "sp-runtime",
@@ -9831,7 +10498,7 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-runtime",
  "sp-std",
 ]
@@ -9844,7 +10511,7 @@
  "hash-db",
  "log",
  "num-traits",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.11.1",
  "rand 0.7.3",
  "smallvec 1.6.1",
@@ -9870,7 +10537,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "impl-serde",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "ref-cast",
  "serde",
  "sp-debug-derive",
@@ -9898,7 +10565,7 @@
  "async-trait",
  "futures-timer 3.0.2",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-api",
  "sp-inherents",
  "sp-runtime",
@@ -9914,7 +10581,7 @@
 dependencies = [
  "erased-serde",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "parking_lot 0.10.2",
  "serde",
  "serde_json",
@@ -9931,9 +10598,9 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "derive_more",
- "futures 0.3.14",
+ "futures 0.3.15",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-api",
  "sp-blockchain",
@@ -9948,7 +10615,7 @@
 dependencies = [
  "hash-db",
  "memory-db",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-core",
  "sp-std",
  "trie-db",
@@ -9960,7 +10627,7 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "futures-core",
  "futures-timer 3.0.2",
  "lazy_static",
@@ -9973,7 +10640,7 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "impl-serde",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "serde",
  "sp-runtime",
  "sp-std",
@@ -9985,7 +10652,7 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "proc-macro-crate 1.0.0",
  "proc-macro2",
  "quote",
@@ -9997,8 +10664,8 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "impl-trait-for-tuples",
- "parity-scale-codec",
+ "impl-trait-for-tuples 0.2.1",
+ "parity-scale-codec 2.1.3",
  "sp-std",
  "wasmi",
 ]
@@ -10048,12 +10715,15 @@
 
 [[package]]
 name = "statrs"
-version = "0.13.0"
+version = "0.14.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e34b58a8f9b7462b6922e0b4e3c83d1b3c2075f7f996a56d6c66afa81590064"
+checksum = "1e0c1f144861fbfd2a8cc82d564ccbf7fb3b7834d4fa128b84e9c2a73371aead"
 dependencies = [
- "nalgebra 0.19.0",
- "rand 0.7.3",
+ "approx 0.4.0",
+ "lazy_static",
+ "nalgebra 0.26.2",
+ "num-traits",
+ "rand 0.8.4",
 ]
 
 [[package]]
@@ -10094,6 +10764,12 @@
 checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
 
 [[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
 name = "structopt"
 version = "0.3.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -10165,12 +10841,12 @@
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
  "frame-system-rpc-runtime-api",
- "futures 0.3.14",
- "jsonrpc-core",
- "jsonrpc-core-client",
- "jsonrpc-derive",
+ "futures 0.3.15",
+ "jsonrpc-core 15.1.0",
+ "jsonrpc-core-client 15.1.0",
+ "jsonrpc-derive 15.1.0",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sc-client-api",
  "sc-rpc-api",
  "serde",
@@ -10203,10 +10879,10 @@
 dependencies = [
  "async-trait",
  "futures 0.1.31",
- "futures 0.3.14",
+ "futures 0.3.15",
  "hash-db",
  "hex",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sc-client-api",
  "sc-client-db",
  "sc-consensus",
@@ -10230,7 +10906,7 @@
 version = "3.0.0"
 source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.3#c94e0cdfe5556680dca1996004751eeb114755d7"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "substrate-test-utils-derive",
  "tokio 0.2.25",
 ]
@@ -10291,9 +10967,9 @@
 
 [[package]]
 name = "syn"
-version = "1.0.69"
+version = "1.0.73"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48fe99c6bd8b1cc636890bcc071842de909d902c81ac7dab53ba33c421ab8ffb"
+checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -10338,8 +11014,8 @@
 dependencies = [
  "cfg-if 1.0.0",
  "libc",
- "rand 0.8.3",
- "redox_syscall 0.2.6",
+ "rand 0.8.4",
+ "redox_syscall 0.2.9",
  "remove_dir_all",
  "winapi 0.3.9",
 ]
@@ -10364,18 +11040,18 @@
 
 [[package]]
 name = "thiserror"
-version = "1.0.24"
+version = "1.0.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e"
+checksum = "fa6f76457f59514c7eeb4e59d891395fab0b2fd1d40723ae737d64153392e9c6"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.24"
+version = "1.0.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0"
+checksum = "8a36768c0fbf1bb15eca10defa29526bda730a2376c2ab4393ccfa16fb1a318d"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -10436,7 +11112,7 @@
  "pbkdf2 0.4.0",
  "rand 0.7.3",
  "rustc-hash",
- "sha2 0.9.3",
+ "sha2 0.9.5",
  "thiserror",
  "unicode-normalization",
  "zeroize",
@@ -10758,9 +11434,9 @@
 
 [[package]]
 name = "tracing"
-version = "0.1.25"
+version = "0.1.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f"
+checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d"
 dependencies = [
  "cfg-if 1.0.0",
  "log",
@@ -10782,9 +11458,9 @@
 
 [[package]]
 name = "tracing-core"
-version = "0.1.17"
+version = "0.1.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f"
+checksum = "a9ff14f98b1a4b289c6248a023c1c2fa1491062964e9fed67ab29c4e4da4a052"
 dependencies = [
  "lazy_static",
 ]
@@ -10795,7 +11471,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
 dependencies = [
- "pin-project 1.0.6",
+ "pin-project 1.0.7",
  "tracing",
 ]
 
@@ -10822,9 +11498,9 @@
 
 [[package]]
 name = "tracing-subscriber"
-version = "0.2.17"
+version = "0.2.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "705096c6f83bf68ea5d357a6aa01829ddbdac531b357b45abeca842938085baa"
+checksum = "aa5553bf0883ba7c9cbe493b085c29926bd41b66afc31ff72cf17ff4fb60dcd5"
 dependencies = [
  "ansi_term 0.12.1",
  "chrono",
@@ -10844,9 +11520,9 @@
 
 [[package]]
 name = "trie-db"
-version = "0.22.3"
+version = "0.22.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec051edf7f0fc9499a2cb0947652cab2148b9d7f61cee7605e312e9f970dacaf"
+checksum = "cd81fe0c8bc2b528a51c9d2c31dae4483367a26a723a3c9a4a8120311d7774e3"
 dependencies = [
  "hash-db",
  "hashbrown",
@@ -10865,10 +11541,20 @@
 ]
 
 [[package]]
+name = "triehash"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1631b201eb031b563d2e85ca18ec8092508e262a3196ce9bd10a67ec87b9f5c"
+dependencies = [
+ "hash-db",
+ "rlp 0.5.0",
+]
+
+[[package]]
 name = "trust-dns-proto"
-version = "0.20.1"
+version = "0.20.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d57e219ba600dd96c2f6d82eb79645068e14edbc5c7e27514af40436b88150c"
+checksum = "ad0d7f5db438199a6e2609debe3f69f808d074e0a2888ee0bccb45fe234d03f4"
 dependencies = [
  "async-trait",
  "cfg-if 1.0.0",
@@ -10877,22 +11563,22 @@
  "futures-channel",
  "futures-io",
  "futures-util",
- "idna 0.2.2",
+ "idna 0.2.3",
  "ipnet",
  "lazy_static",
  "log",
- "rand 0.8.3",
+ "rand 0.8.4",
  "smallvec 1.6.1",
  "thiserror",
  "tinyvec",
- "url 2.2.1",
+ "url 2.2.2",
 ]
 
 [[package]]
 name = "trust-dns-resolver"
-version = "0.20.1"
+version = "0.20.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0437eea3a6da51acc1e946545ff53d5b8fb2611ff1c3bed58522dde100536ae"
+checksum = "f6ad17b608a64bd0735e67bde16b0636f8aa8591f831a25d18443ed00a699770"
 dependencies = [
  "cfg-if 1.0.0",
  "futures-util",
@@ -10920,7 +11606,7 @@
 dependencies = [
  "frame-try-runtime",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "remote-externalities",
  "sc-cli",
  "sc-client-api",
@@ -10960,6 +11646,18 @@
 
 [[package]]
 name = "uint"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9db035e67dfaf7edd9aebfe8676afcd63eed53c8a4044fed514c8cccf1835177"
+dependencies = [
+ "byteorder",
+ "crunchy",
+ "rustc-hex",
+ "static_assertions",
+]
+
+[[package]]
+name = "uint"
 version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e11fe9a9348741cf134085ad57c249508345fe16411b3d7fb4ff2da2f1d6382e"
@@ -10990,9 +11688,9 @@
 
 [[package]]
 name = "unicode-normalization"
-version = "0.1.17"
+version = "0.1.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef"
+checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
 dependencies = [
  "tinyvec",
 ]
@@ -11011,9 +11709,9 @@
 
 [[package]]
 name = "unicode-xid"
-version = "0.2.1"
+version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
+checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
 
 [[package]]
 name = "universal-hash"
@@ -11074,36 +11772,31 @@
 
 [[package]]
 name = "url"
-version = "2.2.1"
+version = "2.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ccd964113622c8e9322cfac19eb1004a07e636c545f325da085d5cdde6f1f8b"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
 dependencies = [
  "form_urlencoded",
- "idna 0.2.2",
+ "idna 0.2.3",
  "matches",
  "percent-encoding 2.1.0",
 ]
 
 [[package]]
 name = "value-bag"
-version = "1.0.0-alpha.6"
+version = "1.0.0-alpha.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b676010e055c99033117c2343b33a40a30b91fecd6c49055ac9cd2d6c305ab1"
+checksum = "dd320e1520f94261153e96f7534476ad869c14022aee1e59af7c778075d840ae"
 dependencies = [
  "ctor",
+ "version_check",
 ]
 
 [[package]]
 name = "vcpkg"
-version = "0.2.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb"
-
-[[package]]
-name = "vec-arena"
-version = "1.1.0"
+version = "0.2.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34b2f665b594b07095e3ac3f718e13c2197143416fae4c5706cffb7b1af8d7f1"
+checksum = "70455df2fdf4e9bf580a92e443f1eb0303c390d682e2ea817312c9e81f8c3399"
 
 [[package]]
 name = "vec_map"
@@ -11175,9 +11868,9 @@
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.73"
+version = "0.2.74"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83240549659d187488f91f33c0f8547cbfef0b2088bc470c116d1d260ef623d9"
+checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd"
 dependencies = [
  "cfg-if 1.0.0",
  "wasm-bindgen-macro",
@@ -11185,9 +11878,9 @@
 
 [[package]]
 name = "wasm-bindgen-backend"
-version = "0.2.73"
+version = "0.2.74"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae70622411ca953215ca6d06d3ebeb1e915f0f6613e3b495122878d7ebec7dae"
+checksum = "3b33f6a0694ccfea53d94db8b2ed1c3a8a4c86dd936b13b9f0a15ec4a451b900"
 dependencies = [
  "bumpalo",
  "lazy_static",
@@ -11200,9 +11893,9 @@
 
 [[package]]
 name = "wasm-bindgen-futures"
-version = "0.4.23"
+version = "0.4.24"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81b8b767af23de6ac18bf2168b690bed2902743ddf0fb39252e36f9e2bfc63ea"
+checksum = "5fba7978c679d53ce2d0ac80c8c175840feb849a161664365d1287b41f2e67f1"
 dependencies = [
  "cfg-if 1.0.0",
  "js-sys",
@@ -11212,9 +11905,9 @@
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.73"
+version = "0.2.74"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e734d91443f177bfdb41969de821e15c516931c3c3db3d318fa1b68975d0f6f"
+checksum = "088169ca61430fe1e58b8096c24975251700e7b1f6fd91cc9d59b04fb9b18bd4"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -11222,9 +11915,9 @@
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.73"
+version = "0.2.74"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d53739ff08c8a68b0fdbcd54c372b8ab800b1449ab3c9d706503bc7dd1621b2c"
+checksum = "be2241542ff3d9f241f5e2cb6dd09b37efe786df8851c54957683a49f0987a97"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -11235,9 +11928,9 @@
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.73"
+version = "0.2.74"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9a543ae66aa233d14bb765ed9af4a33e81b8b58d1584cf1b47ff8cd0b9e4489"
+checksum = "d7cff876b8f18eed75a66cf49b65e7f967cb354a7aa16003fb55dbfd25b44b4f"
 
 [[package]]
 name = "wasm-gc-api"
@@ -11256,7 +11949,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "js-sys",
  "parking_lot 0.11.1",
  "pin-utils",
@@ -11349,7 +12042,7 @@
  "libc",
  "log",
  "serde",
- "sha2 0.9.3",
+ "sha2 0.9.5",
  "toml",
  "winapi 0.3.9",
  "zstd",
@@ -11376,9 +12069,9 @@
 checksum = "382eecd6281c6c1d1f3c904c3c143e671fc1a9573820cbfa777fba45ce2eda9c"
 dependencies = [
  "anyhow",
- "gimli",
+ "gimli 0.23.0",
  "more-asserts",
- "object",
+ "object 0.23.0",
  "target-lexicon",
  "thiserror",
  "wasmparser",
@@ -11396,7 +12089,7 @@
  "cranelift-codegen",
  "cranelift-entity",
  "cranelift-wasm",
- "gimli",
+ "gimli 0.23.0",
  "indexmap",
  "log",
  "more-asserts",
@@ -11422,7 +12115,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9b5f649623859a12d361fe4cc4793de44f7c3ff34c322c5714289787e89650bb"
 dependencies = [
- "addr2line",
+ "addr2line 0.14.1",
  "anyhow",
  "cfg-if 1.0.0",
  "cranelift-codegen",
@@ -11430,10 +12123,10 @@
  "cranelift-frontend",
  "cranelift-native",
  "cranelift-wasm",
- "gimli",
+ "gimli 0.23.0",
  "log",
  "more-asserts",
- "object",
+ "object 0.23.0",
  "rayon",
  "region",
  "serde",
@@ -11457,7 +12150,7 @@
 dependencies = [
  "anyhow",
  "more-asserts",
- "object",
+ "object 0.23.0",
  "target-lexicon",
  "wasmtime-debug",
  "wasmtime-environ",
@@ -11471,10 +12164,10 @@
 dependencies = [
  "anyhow",
  "cfg-if 1.0.0",
- "gimli",
+ "gimli 0.23.0",
  "lazy_static",
  "libc",
- "object",
+ "object 0.23.0",
  "scroll",
  "serde",
  "target-lexicon",
@@ -11495,7 +12188,7 @@
  "lazy_static",
  "libc",
  "log",
- "memoffset 0.6.3",
+ "memoffset 0.6.4",
  "more-asserts",
  "psm",
  "region",
@@ -11506,27 +12199,27 @@
 
 [[package]]
 name = "wast"
-version = "35.0.2"
+version = "36.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68"
+checksum = "8b5d7ba374a364571da1cb0a379a3dc302582a2d9937a183bfe35b68ad5bb9c4"
 dependencies = [
  "leb128",
 ]
 
 [[package]]
 name = "wat"
-version = "1.0.37"
+version = "1.0.38"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ec280a739b69173e0ffd12c1658507996836ba4e992ed9bc1e5385a0bd72a02"
+checksum = "16383df7f0e3901484c2dda6294ed6895caa3627ce4f6584141dcf30a33a23e6"
 dependencies = [
  "wast",
 ]
 
 [[package]]
 name = "web-sys"
-version = "0.3.50"
+version = "0.3.51"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a905d57e488fec8861446d3393670fb50d27a262344013181c2cdf9fff5481be"
+checksum = "e828417b379f3df7111d3a2a9e5753706cae29c41f7c4029ee9fd77f3e09e582"
 dependencies = [
  "js-sys",
  "wasm-bindgen",
@@ -11552,10 +12245,10 @@
 ]
 
 [[package]]
-name = "wepoll-sys"
-version = "3.0.1"
+name = "wepoll-ffi"
+version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fcb14dea929042224824779fbc82d9fab8d2e6d3cbc0ac404de8edf489e77ff"
+checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
 dependencies = [
  "cc",
 ]
@@ -11566,7 +12259,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "beefy-primitives",
- "bitvec",
+ "bitvec 0.20.4",
  "frame-executive",
  "frame-support",
  "frame-system",
@@ -11606,7 +12299,7 @@
  "pallet-utility",
  "pallet-vesting",
  "pallet-xcm",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-parachain",
  "polkadot-primitives",
  "polkadot-runtime-common",
@@ -11639,15 +12332,6 @@
 
 [[package]]
 name = "which"
-version = "3.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "which"
 version = "4.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b55551e42cbdf2ce2bedd2203d0cc08dba002c27510f86dab6d0ce304cba3dfe"
@@ -11747,8 +12431,8 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "derivative",
- "impl-trait-for-tuples",
- "parity-scale-codec",
+ "impl-trait-for-tuples 0.2.1",
+ "parity-scale-codec 2.1.3",
 ]
 
 [[package]]
@@ -11758,9 +12442,9 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "impl-trait-for-tuples",
+ "impl-trait-for-tuples 0.2.1",
  "pallet-transaction-payment",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "polkadot-parachain",
  "sp-arithmetic",
  "sp-io",
@@ -11776,9 +12460,9 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.3#aa386760948574af4078c59decf558d16efe15e2"
 dependencies = [
  "frame-support",
- "impl-trait-for-tuples",
+ "impl-trait-for-tuples 0.2.1",
  "log",
- "parity-scale-codec",
+ "parity-scale-codec 2.1.3",
  "sp-arithmetic",
  "sp-core",
  "sp-io",
@@ -11793,11 +12477,11 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e7d9028f208dd5e63c614be69f115c1b53cacc1111437d4c765185856666c107"
 dependencies = [
- "futures 0.3.14",
+ "futures 0.3.15",
  "log",
  "nohash-hasher",
  "parking_lot 0.11.1",
- "rand 0.8.3",
+ "rand 0.8.4",
  "static_assertions",
 ]
 
@@ -11809,18 +12493,18 @@
 
 [[package]]
 name = "zeroize"
-version = "1.2.0"
+version = "1.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81a974bcdd357f0dca4d41677db03436324d45a4c9ed2d0b873a5a360ce41c36"
+checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd"
 dependencies = [
  "zeroize_derive",
 ]
 
 [[package]]
 name = "zeroize_derive"
-version = "1.0.1"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3f369ddb18862aba61aa49bf31e74d29f0f162dec753063200e1dc084345d16"
+checksum = "a2c1e130bebaeab2f23886bf9acbaca14b092408c452543c857f66399cd6dab1"
 dependencies = [
  "proc-macro2",
  "quote",
modifiedCargo.tomldiffbeforeafterboth
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,10 +1,12 @@
 [workspace]
+resolver = "2"
 members = [
-    'node',
+    'node/*',
     'pallets/*',
     'primitives',
     'runtime',
+    'crates/evm-coder',
+    'crates/evm-coder-macros',
 ]
-resolver = "2"
 [profile.release]
 panic = 'unwind'
addedcrates/evm-coder-macros/Cargo.tomldiffbeforeafterboth
--- /dev/null
+++ b/crates/evm-coder-macros/Cargo.toml
@@ -0,0 +1,16 @@
+[package]
+name = "evm-coder-macros"
+version = "0.1.0"
+edition = "2018"
+
+[lib]
+proc-macro = true
+
+[dependencies]
+sha3 = "0.9.1"
+quote = "1.0"
+proc-macro2 = "1.0"
+syn = { version = "1.0", features = ["full"] }
+hex = "0.4.3"
+Inflector = "0.11.4"
+darling = "0.13.0"
\ No newline at end of file
addedcrates/evm-coder-macros/src/lib.rsdiffbeforeafterboth
--- /dev/null
+++ b/crates/evm-coder-macros/src/lib.rs
@@ -0,0 +1,224 @@
+use darling::FromMeta;
+use inflector::cases;
+use proc_macro::TokenStream;
+use quote::quote;
+use sha3::{Digest, Keccak256};
+use syn::{
+	AttributeArgs, DeriveInput, GenericArgument, Ident, ItemTrait, Pat, Path, PathArguments,
+	PathSegment, Type, parse_macro_input, spanned::Spanned,
+};
+
+mod solidity_interface;
+mod to_log;
+
+fn fn_selector_str(input: &str) -> u32 {
+	let mut hasher = Keccak256::new();
+	hasher.update(input.as_bytes());
+	let result = hasher.finalize();
+
+	let mut selector_bytes = [0; 4];
+	selector_bytes.copy_from_slice(&result[0..4]);
+
+	u32::from_be_bytes(selector_bytes)
+}
+
+/// Returns solidity function selector (first 4 bytes of hash) by its
+/// textual representation
+///
+/// ```rs
+/// use evm_coder_macros::fn_selector;
+///
+/// assert_eq!(fn_selector!(transfer(address, uint256)), 0xa9059cbb);
+/// ```
+#[proc_macro]
+pub fn fn_selector(input: TokenStream) -> TokenStream {
+	let input = input.to_string().replace(' ', "");
+	let selector = fn_selector_str(&input);
+
+	(quote! {
+		#selector
+	})
+	.into()
+}
+
+fn event_selector_str(input: &str) -> [u8; 32] {
+	let mut hasher = Keccak256::new();
+	hasher.update(input.as_bytes());
+	let result = hasher.finalize();
+
+	let mut selector_bytes = [0; 32];
+	selector_bytes.copy_from_slice(&result[0..32]);
+	selector_bytes
+}
+
+/// Returns solidity topic (hash) by its textual representation
+///
+/// ```rs
+/// use evm_coder_macros::event_topic;
+///
+/// assert_eq!(
+///     format!("{:x}", event_topic!(Transfer(address, address, uint256))),
+///     "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
+/// );
+/// ```
+#[proc_macro]
+pub fn event_topic(stream: TokenStream) -> TokenStream {
+	let input = stream.to_string().replace(' ', "");
+	let selector_bytes = event_selector_str(&input);
+
+	(quote! {
+		::primitive_types::H256([#(
+			#selector_bytes,
+		)*])
+	})
+	.into()
+}
+
+fn parse_path(ty: &Type) -> syn::Result<&Path> {
+	match &ty {
+		syn::Type::Path(pat) => {
+			if let Some(qself) = &pat.qself {
+				return Err(syn::Error::new(qself.ty.span(), "no receiver expected"));
+			}
+			Ok(&pat.path)
+		}
+		_ => Err(syn::Error::new(ty.span(), "expected ty to be path")),
+	}
+}
+
+fn parse_path_segment(path: &Path) -> syn::Result<&PathSegment> {
+	if path.segments.len() != 1 {
+		return Err(syn::Error::new(
+			path.span(),
+			"expected path to have only segment",
+		));
+	}
+	let last_segment = &path.segments.last().unwrap();
+	Ok(last_segment)
+}
+
+fn parse_ident_from_pat(pat: &Pat) -> syn::Result<&Ident> {
+	match pat {
+		Pat::Ident(i) => Ok(&i.ident),
+		_ => Err(syn::Error::new(pat.span(), "expected pat ident")),
+	}
+}
+
+fn parse_ident_from_segment(segment: &PathSegment) -> syn::Result<&Ident> {
+	if segment.arguments != PathArguments::None {
+		return Err(syn::Error::new(
+			segment.arguments.span(),
+			"unexpected generic type",
+		));
+	}
+	Ok(&segment.ident)
+}
+
+fn parse_ident_from_path(path: &Path) -> syn::Result<&Ident> {
+	let segment = parse_path_segment(path)?;
+	parse_ident_from_segment(segment)
+}
+
+fn parse_ident_from_type(ty: &Type) -> syn::Result<&Ident> {
+	let path = parse_path(ty)?;
+	parse_ident_from_path(path)
+}
+
+// Gets T out of Result<T>
+fn parse_result_ok(ty: &Type) -> syn::Result<&Ident> {
+	let path = parse_path(ty)?;
+	let segment = parse_path_segment(path)?;
+
+	if segment.ident != "Result" {
+		return Err(syn::Error::new(
+			ty.span(),
+			"expected Result as return type (no renamed aliases allowed)",
+		));
+	}
+	let args = match &segment.arguments {
+		PathArguments::AngleBracketed(e) => e,
+		_ => {
+			return Err(syn::Error::new(
+				segment.arguments.span(),
+				"missing Result generics",
+			))
+		}
+	};
+
+	let args = &args.args;
+	let arg = args.first().unwrap();
+
+	let ty = match arg {
+		GenericArgument::Type(ty) => ty,
+		_ => {
+			return Err(syn::Error::new(
+				arg.span(),
+				"expected first generic to be type",
+			))
+		}
+	};
+
+	parse_ident_from_type(ty)
+}
+
+fn pascal_ident_to_call(ident: &Ident) -> Ident {
+	let name = format!("{}Call", ident);
+	Ident::new(&name, ident.span())
+}
+fn snake_ident_to_pascal(ident: &Ident) -> Ident {
+	let name = ident.to_string();
+	let name = cases::pascalcase::to_pascal_case(&name);
+	Ident::new(&name, ident.span())
+}
+fn snake_ident_to_screaming(ident: &Ident) -> Ident {
+	let name = ident.to_string();
+	let name = cases::screamingsnakecase::to_screaming_snake_case(&name);
+	Ident::new(&name, ident.span())
+}
+fn pascal_ident_to_snake_call(ident: &Ident) -> Ident {
+	let name = ident.to_string();
+	let name = cases::snakecase::to_snake_case(&name);
+	let name = format!("call_{}", name);
+	Ident::new(&name, ident.span())
+}
+
+fn format_ty(ty: &Ident) -> String {
+	if ty == "string" {
+		format!("{} memory", ty)
+	} else {
+		ty.to_string()
+	}
+}
+
+#[proc_macro_attribute]
+pub fn solidity_interface(args: TokenStream, stream: TokenStream) -> TokenStream {
+	let args = parse_macro_input!(args as AttributeArgs);
+	let args = solidity_interface::InterfaceInfo::from_list(&args).unwrap();
+
+	let input: ItemTrait = match syn::parse(stream) {
+		Ok(t) => t,
+		Err(e) => return e.to_compile_error().into(),
+	};
+
+	match solidity_interface::SolidityInterface::try_from(args, &input) {
+		Ok(v) => v.expand(),
+		Err(e) => e.to_compile_error(),
+	}
+	.into()
+}
+
+#[proc_macro_attribute]
+pub fn solidity(_args: TokenStream, stream: TokenStream) -> TokenStream {
+	stream
+}
+
+#[proc_macro_derive(ToLog, attributes(indexed))]
+pub fn to_log(value: TokenStream) -> TokenStream {
+	let input = parse_macro_input!(value as DeriveInput);
+
+	match to_log::Events::try_from(&input) {
+		Ok(e) => e.expand(),
+		Err(e) => e.to_compile_error(),
+	}
+	.into()
+}
addedcrates/evm-coder-macros/src/solidity_interface.rsdiffbeforeafterboth
--- /dev/null
+++ b/crates/evm-coder-macros/src/solidity_interface.rs
@@ -0,0 +1,569 @@
+use quote::quote;
+use darling::FromMeta;
+use inflector::cases;
+use std::fmt::Write;
+use syn::{
+	FnArg, Ident, ItemTrait, Meta, NestedMeta, PatType, Path, ReturnType, TraitItem,
+	TraitItemMethod, Visibility, spanned::Spanned,
+};
+
+use crate::{
+	fn_selector_str, format_ty, parse_ident_from_pat, parse_ident_from_path, parse_ident_from_type,
+	parse_result_ok, pascal_ident_to_call, pascal_ident_to_snake_call, snake_ident_to_pascal,
+	snake_ident_to_screaming,
+};
+
+struct Is {
+	name: Ident,
+	pascal_call_name: Ident,
+	snake_call_name: Ident,
+}
+impl Is {
+	fn try_from(path: &Path) -> syn::Result<Self> {
+		let name = parse_ident_from_path(path)?.clone();
+		Ok(Self {
+			pascal_call_name: pascal_ident_to_call(&name),
+			snake_call_name: pascal_ident_to_snake_call(&name),
+			name,
+		})
+	}
+
+	fn expand_call_def(&self) -> proc_macro2::TokenStream {
+		let name = &self.name;
+		let pascal_call_name = &self.pascal_call_name;
+		quote! {
+			#name(#pascal_call_name)
+		}
+	}
+
+	fn expand_interface_id(&self) -> proc_macro2::TokenStream {
+		let pascal_call_name = &self.pascal_call_name;
+		quote! {
+			interface_id ^= #pascal_call_name::interface_id();
+		}
+	}
+
+	fn expand_supports_interface(&self) -> proc_macro2::TokenStream {
+		let pascal_call_name = &self.pascal_call_name;
+		quote! {
+			#pascal_call_name::supports_interface(interface_id)
+		}
+	}
+
+	fn expand_variant_call(&self) -> proc_macro2::TokenStream {
+		let name = &self.name;
+		let snake_call_name = &self.snake_call_name;
+		quote! {
+			InternalCall::#name(call) => return self.#snake_call_name(Msg {
+				call,
+				caller: c.caller,
+				value: c.value,
+			})
+		}
+	}
+
+	fn expand_call_inner(&self) -> proc_macro2::TokenStream {
+		let snake_call_name = &self.snake_call_name;
+		let pascal_call_name = &self.pascal_call_name;
+		quote! {
+			fn #snake_call_name(&mut self, c: Msg<#pascal_call_name>) -> ::core::result::Result<::evm_coder::abi::AbiWriter, Self::Error>;
+		}
+	}
+
+	fn expand_parse(&self) -> proc_macro2::TokenStream {
+		let name = &self.name;
+		let pascal_call_name = &self.pascal_call_name;
+		quote! {
+			if let Some(parsed_call) = #pascal_call_name::parse(method_id, reader)? {
+				return Ok(Some(Self::#name(parsed_call)))
+			}
+		}
+	}
+}
+
+#[derive(Default)]
+struct IsList(Vec<Is>);
+impl FromMeta for IsList {
+	fn from_list(items: &[NestedMeta]) -> darling::Result<Self> {
+		let mut out = Vec::new();
+		for item in items {
+			match item {
+				NestedMeta::Meta(Meta::Path(path)) => out.push(Is::try_from(path)?),
+				_ => return Err(syn::Error::new(item.span(), "expected path").into()),
+			}
+		}
+		Ok(Self(out))
+	}
+}
+
+#[derive(FromMeta)]
+pub struct InterfaceInfo {
+	#[darling(default)]
+	is: IsList,
+	#[darling(default)]
+	inline_is: IsList,
+	#[darling(default)]
+	events: IsList,
+}
+
+#[derive(FromMeta)]
+struct MethodInfo {
+	#[darling(default)]
+	rename_selector: Option<String>,
+}
+
+struct MethodArg {
+	name: Ident,
+	ty: Ident,
+}
+impl MethodArg {
+	fn try_from(value: &PatType) -> syn::Result<Self> {
+		Ok(Self {
+			name: parse_ident_from_pat(&value.pat)?.clone(),
+			ty: parse_ident_from_type(&value.ty)?.clone(),
+		})
+	}
+	fn is_value(&self) -> bool {
+		self.ty == "value"
+	}
+	fn is_caller(&self) -> bool {
+		self.ty == "caller"
+	}
+	fn is_special(&self) -> bool {
+		self.is_value() || self.is_caller()
+	}
+	fn selector_ty(&self) -> &Ident {
+		assert!(!self.is_special());
+		&self.ty
+	}
+
+	fn expand_call_def(&self) -> proc_macro2::TokenStream {
+		assert!(!self.is_special());
+		let name = &self.name;
+		let ty = &self.ty;
+
+		quote! {
+			#name: #ty
+		}
+	}
+
+	fn expand_parse(&self) -> proc_macro2::TokenStream {
+		assert!(!self.is_special());
+		let name = &self.name;
+		quote! {
+			#name: reader.abi_read()?
+		}
+	}
+
+	fn expand_call_arg(&self) -> proc_macro2::TokenStream {
+		if self.is_value() {
+			quote! {
+				c.value.clone()
+			}
+		} else if self.is_caller() {
+			quote! {
+				c.caller.clone()
+			}
+		} else {
+			let name = &self.name;
+			quote! {
+				#name
+			}
+		}
+	}
+
+	fn solidity_def(&self) -> String {
+		assert!(!self.is_special());
+		format!("{} {}", format_ty(&self.ty), self.name)
+	}
+}
+
+#[derive(PartialEq)]
+enum Mutability {
+	Mutable,
+	View,
+	Pure,
+}
+
+struct Method {
+	name: Ident,
+	camel_name: String,
+	pascal_name: Ident,
+	screaming_name: Ident,
+	selector_str: String,
+	selector: u32,
+	args: Vec<MethodArg>,
+	has_normal_args: bool,
+	mutability: Mutability,
+	result: Ident,
+}
+impl Method {
+	fn try_from(value: &TraitItemMethod) -> syn::Result<Self> {
+		let mut info = MethodInfo {
+			rename_selector: None,
+		};
+		for attr in &value.attrs {
+			let ident = parse_ident_from_path(&attr.path)?;
+			if ident == "solidity" {
+				let args = attr.parse_meta().unwrap();
+				info = MethodInfo::from_meta(&args).unwrap();
+			} else if ident == "doc" {
+				// TODO: Add docs to evm interfaces
+			}
+		}
+		let ident = &value.sig.ident;
+		let ident_str = ident.to_string();
+		if !cases::snakecase::is_snake_case(&ident_str) {
+			return Err(syn::Error::new(ident.span(), "method name should be snake_cased\nif alternative solidity name needs to be set - use #[solidity] attribute"));
+		}
+
+		let mut mutability = Mutability::Pure;
+
+		if let Some(FnArg::Receiver(receiver)) = value
+			.sig
+			.inputs
+			.iter()
+			.find(|arg| matches!(arg, FnArg::Receiver(_)))
+		{
+			if receiver.reference.is_none() {
+				return Err(syn::Error::new(
+					receiver.span(),
+					"receiver should be by ref",
+				));
+			}
+			if receiver.mutability.is_some() {
+				mutability = Mutability::Mutable;
+			} else {
+				mutability = Mutability::View;
+			}
+		}
+		let mut args = Vec::new();
+		for typ in value
+			.sig
+			.inputs
+			.iter()
+			.filter(|arg| matches!(arg, FnArg::Typed(_)))
+		{
+			let typ = match typ {
+				FnArg::Typed(typ) => typ,
+				_ => unreachable!(),
+			};
+			args.push(MethodArg::try_from(typ)?);
+		}
+
+		if mutability != Mutability::Mutable && args.iter().any(|arg| arg.is_value()) {
+			return Err(syn::Error::new(
+				args.iter().find(|arg| arg.is_value()).unwrap().ty.span(),
+				"payable function should be mutable",
+			));
+		}
+
+		let result = match &value.sig.output {
+			ReturnType::Type(_, ty) => ty,
+			_ => return Err(syn::Error::new(value.sig.output.span(), "interface method should return Result<value>\nif there is no value to return - specify void (which is alias to unit)")),
+		};
+		let result = parse_result_ok(&result)?;
+
+		let camel_name = info
+			.rename_selector
+			.unwrap_or_else(|| cases::camelcase::to_camel_case(&ident.to_string()));
+		let mut selector_str = camel_name.clone();
+		selector_str.push('(');
+		let mut has_normal_args = false;
+		for (i, arg) in args.iter().filter(|arg| !arg.is_special()).enumerate() {
+			if i != 0 {
+				selector_str.push(',');
+			}
+			write!(selector_str, "{}", arg.selector_ty()).unwrap();
+			has_normal_args = true;
+		}
+		selector_str.push(')');
+		let selector = fn_selector_str(&selector_str);
+
+		Ok(Self {
+			name: ident.clone(),
+			camel_name,
+			pascal_name: snake_ident_to_pascal(&ident),
+			screaming_name: snake_ident_to_screaming(&ident),
+			selector_str,
+			selector,
+			args,
+			has_normal_args,
+			mutability,
+			result: result.clone(),
+		})
+	}
+	fn expand_call_def(&self) -> proc_macro2::TokenStream {
+		let defs = self
+			.args
+			.iter()
+			.filter(|a| !a.is_special())
+			.map(|a| a.expand_call_def());
+		let pascal_name = &self.pascal_name;
+
+		if self.has_normal_args {
+			quote! {
+				#pascal_name {
+					#(
+						#defs,
+					)*
+				}
+			}
+		} else {
+			quote! {#pascal_name}
+		}
+	}
+
+	fn expand_const(&self) -> proc_macro2::TokenStream {
+		let screaming_name = &self.screaming_name;
+		let selector = self.selector;
+		let selector_str = &self.selector_str;
+		quote! {
+			#[doc = #selector_str]
+			const #screaming_name: u32 = #selector;
+		}
+	}
+
+	fn expand_interface_id(&self) -> proc_macro2::TokenStream {
+		let screaming_name = &self.screaming_name;
+		quote! {
+			interface_id ^= Self::#screaming_name;
+		}
+	}
+
+	fn expand_parse(&self) -> proc_macro2::TokenStream {
+		let pascal_name = &self.pascal_name;
+		let screaming_name = &self.screaming_name;
+		if self.has_normal_args {
+			let parsers = self
+				.args
+				.iter()
+				.filter(|a| !a.is_special())
+				.map(|a| a.expand_parse());
+			quote! {
+				Self::#screaming_name => return Ok(Some(Self::#pascal_name {
+					#(
+						#parsers,
+					)*
+				}))
+			}
+		} else {
+			quote! { Self::#screaming_name => return Ok(Some(Self::#pascal_name)) }
+		}
+	}
+
+	fn expand_variant_call(&self) -> proc_macro2::TokenStream {
+		let pascal_name = &self.pascal_name;
+		let name = &self.name;
+
+		let matcher = if self.has_normal_args {
+			let names = self
+				.args
+				.iter()
+				.filter(|a| !a.is_special())
+				.map(|a| &a.name);
+
+			quote! {{
+				#(
+					#names,
+				)*
+			}}
+		} else {
+			quote! {}
+		};
+
+		let receiver = match self.mutability {
+			Mutability::Mutable | Mutability::View => quote! {self.},
+			Mutability::Pure => quote! {Self::},
+		};
+		let args = self.args.iter().map(|a| a.expand_call_arg());
+
+		quote! {
+			InternalCall::#pascal_name #matcher => {
+				let result = #receiver #name(
+					#(
+						#args,
+					)*
+				)?;
+				(&result).abi_write(&mut writer);
+			}
+		}
+	}
+
+	fn solidity_def(&self) -> String {
+		let mut out = format!("function {}(", self.camel_name);
+		for (i, arg) in self.args.iter().filter(|a| !a.is_special()).enumerate() {
+			if i != 0 {
+				out.push_str(", ");
+			}
+			out.push_str(&arg.solidity_def());
+		}
+		out.push(')');
+		match self.mutability {
+			Mutability::Mutable => {}
+			Mutability::View => write!(out, " view").unwrap(),
+			Mutability::Pure => write!(out, " pure").unwrap(),
+		}
+		if self.result != "void" {
+			write!(out, " returns ({})", format_ty(&self.result)).unwrap();
+		}
+		out.push(';');
+		out
+	}
+}
+
+pub struct SolidityInterface {
+	vis: Visibility,
+	name: Ident,
+	info: InterfaceInfo,
+	methods: Vec<Method>,
+	items: Vec<TraitItem>,
+}
+impl SolidityInterface {
+	pub fn try_from(info: InterfaceInfo, value: &ItemTrait) -> syn::Result<Self> {
+		let mut found_error = false;
+		let mut methods = Vec::new();
+
+		for item in &value.items {
+			match item {
+				TraitItem::Type(ty) => {
+					if ty.ident == "Error" {
+						found_error = true;
+					}
+				}
+				TraitItem::Method(method) => methods.push(Method::try_from(&method)?),
+				_ => {}
+			}
+		}
+		if !found_error {
+			return Err(syn::Error::new(
+				value.span(),
+				"expected associated type called Error, which should implement From<&str>",
+			));
+		}
+		Ok(Self {
+			vis: value.vis.clone(),
+			name: value.ident.clone(),
+			info,
+			methods,
+			items: value.items.clone(),
+		})
+	}
+	pub fn expand(self) -> proc_macro2::TokenStream {
+		let vis = self.vis;
+		let name = self.name;
+		let items = self.items;
+
+		let call_name = pascal_ident_to_call(&name);
+
+		let call_sub = self
+			.info
+			.inline_is
+			.0
+			.iter()
+			.chain(self.info.is.0.iter())
+			.map(Is::expand_call_def);
+		let call_inner = self
+			.info
+			.inline_is
+			.0
+			.iter()
+			.chain(self.info.is.0.iter())
+			.map(Is::expand_call_inner);
+		let call_parse = self
+			.info
+			.inline_is
+			.0
+			.iter()
+			.chain(self.info.is.0.iter())
+			.map(Is::expand_parse);
+		let call_variants = self
+			.info
+			.inline_is
+			.0
+			.iter()
+			.chain(self.info.is.0.iter())
+			.map(Is::expand_variant_call);
+
+		let inline_interface_id = self.info.inline_is.0.iter().map(Is::expand_interface_id);
+		let supports_interface = self.info.is.0.iter().map(Is::expand_supports_interface);
+
+		let calls = self.methods.iter().map(Method::expand_call_def);
+		let consts = self.methods.iter().map(Method::expand_const);
+		let interface_id = self.methods.iter().map(Method::expand_interface_id);
+		let parsers = self.methods.iter().map(Method::expand_parse);
+		let call_variants_this = self.methods.iter().map(Method::expand_variant_call);
+
+		// let methods = self.methods.iter().map(Method::solidity_def);
+
+		quote! {
+			#[derive(Debug)]
+			#vis enum #call_name {
+				#(
+					#calls,
+				)*
+				#(
+					#call_sub,
+				)*
+			}
+			impl #call_name {
+				#(
+					#consts
+				)*
+				pub fn parse(method_id: u32, reader: &mut ::evm_coder::abi::AbiReader) -> ::evm_coder::abi::Result<Option<Self>> {
+					use ::evm_coder::abi::AbiRead;
+					match method_id {
+						#(
+							#parsers,
+						)*
+						_ => {},
+					}
+					#(
+						#call_parse
+					)else*
+					return Ok(None);
+				}
+				pub const fn interface_id() -> u32 {
+					let mut interface_id = 0;
+					#(#interface_id)*
+					#(#inline_interface_id)*
+					interface_id
+				}
+				pub fn supports_interface(interface_id: u32) -> bool {
+					interface_id != 0xffffff && (
+						interface_id == Self::interface_id()
+						#(
+							|| #supports_interface
+						)*
+					)
+				}
+			}
+			#vis trait #name {
+				#(
+					#items
+				)*
+				#(
+					#call_inner
+				)*
+				fn call(&mut self, c: Msg<#call_name>) -> ::core::result::Result<::evm_coder::abi::AbiWriter, Self::Error> {
+					use ::evm_coder::abi::AbiWrite;
+					type InternalCall = #call_name;
+					match c.call {
+						#(
+							#call_variants,
+						)*
+						_ => {},
+					}
+					let mut writer = ::evm_coder::abi::AbiWriter::default();
+					match c.call {
+						#(
+							#call_variants_this,
+						)*
+						_ => unreachable!()
+					}
+					Ok(writer)
+				}
+			}
+		}
+	}
+}
addedcrates/evm-coder-macros/src/to_log.rsdiffbeforeafterboth
--- /dev/null
+++ b/crates/evm-coder-macros/src/to_log.rs
@@ -0,0 +1,170 @@
+use syn::{Data, DeriveInput, Field, Fields, Ident, Variant, spanned::Spanned};
+use std::fmt::Write;
+use quote::quote;
+
+use crate::{parse_ident_from_path, parse_ident_from_type, snake_ident_to_screaming};
+
+struct EventField {
+	name: Ident,
+	ty: Ident,
+	indexed: bool,
+}
+
+impl EventField {
+	fn try_from(field: &Field) -> syn::Result<Self> {
+		let name = field.ident.as_ref().unwrap();
+		let ty = parse_ident_from_type(&field.ty)?;
+		let mut indexed = false;
+		for attr in &field.attrs {
+			if let Ok(ident) = parse_ident_from_path(&attr.path) {
+				if ident == "indexed" {
+					indexed = true;
+				}
+			}
+		}
+		Ok(Self {
+			name: name.to_owned(),
+			ty: ty.to_owned(),
+			indexed,
+		})
+	}
+}
+
+struct Event {
+	name: Ident,
+	name_screaming: Ident,
+	fields: Vec<EventField>,
+	selector: [u8; 32],
+	selector_str: String,
+}
+
+impl Event {
+	fn try_from(variant: &Variant) -> syn::Result<Self> {
+		let name = &variant.ident;
+		let name_screaming = snake_ident_to_screaming(&name);
+
+		let named = match &variant.fields {
+			Fields::Named(named) => named,
+			_ => {
+				return Err(syn::Error::new(
+					variant.fields.span(),
+					"expected named fields",
+				))
+			}
+		};
+		let mut fields = Vec::new();
+		for field in &named.named {
+			fields.push(EventField::try_from(&field)?);
+		}
+		let mut selector_str = format!("{}(", name);
+		for (i, arg) in fields.iter().enumerate() {
+			if i != 0 {
+				write!(selector_str, ",").unwrap();
+			}
+			write!(selector_str, "{}", arg.ty).unwrap();
+		}
+		selector_str.push(')');
+		let selector = crate::event_selector_str(&selector_str);
+
+		Ok(Self {
+			name: name.to_owned(),
+			name_screaming,
+			fields,
+			selector,
+			selector_str,
+		})
+	}
+
+	fn expand_serializers(&self) -> proc_macro2::TokenStream {
+		let name = &self.name;
+		let name_screaming = &self.name_screaming;
+		let fields = self.fields.iter().map(|f| &f.name);
+
+		let indexed = self.fields.iter().filter(|f| f.indexed).map(|f| &f.name);
+		let plain = self.fields.iter().filter(|f| !f.indexed).map(|f| &f.name);
+
+		quote! {
+			Self::#name {#(
+				#fields,
+			)*} => {
+				topics.push(topic::from(Self::#name_screaming));
+				#(
+					topics.push(#indexed.to_topic());
+				)*
+				#(
+					#plain.abi_write(&mut writer);
+				)*
+			}
+		}
+	}
+
+	fn expand_consts(&self) -> proc_macro2::TokenStream {
+		let name_screaming = &self.name_screaming;
+		let selector_str = &self.selector_str;
+		let selector = &self.selector;
+
+		quote! {
+			#[doc = #selector_str]
+			const #name_screaming: [u8; 32] = [#(
+				#selector,
+			)*];
+		}
+	}
+}
+
+pub struct Events {
+	name: Ident,
+	events: Vec<Event>,
+}
+
+impl Events {
+	pub fn try_from(data: &DeriveInput) -> syn::Result<Self> {
+		let name = &data.ident;
+		let en = match &data.data {
+			Data::Enum(en) => en,
+			_ => return Err(syn::Error::new(data.span(), "expected enum")),
+		};
+		let mut events = Vec::new();
+		for variant in &en.variants {
+			events.push(Event::try_from(variant)?);
+		}
+		Ok(Self {
+			name: name.to_owned(),
+			events,
+		})
+	}
+	pub fn expand(&self) -> proc_macro2::TokenStream {
+		let name = &self.name;
+
+		let consts = self.events.iter().map(Event::expand_consts);
+		let serializers = self.events.iter().map(Event::expand_serializers);
+
+		quote! {
+			impl #name {
+				#(
+					#consts
+				)*
+			}
+
+			#[automatically_derived]
+			impl ::evm_coder::events::ToLog for #name {
+				fn to_log(&self, contract: address) -> ::ethereum::Log {
+					use ::evm_coder::events::ToTopic;
+					use ::evm_coder::abi::AbiWrite;
+					let mut writer = ::evm_coder::abi::AbiWriter::new();
+					let mut topics = Vec::new();
+					match self {
+						#(
+							#serializers,
+						)*
+					}
+					::ethereum::Log {
+						address: contract,
+						topics,
+						data: writer.finish(),
+					}
+				}
+			}
+		}
+	}
+}
addedcrates/evm-coder/Cargo.tomldiffbeforeafterboth
--- /dev/null
+++ b/crates/evm-coder/Cargo.toml
@@ -0,0 +1,17 @@
+[package]
+name = "evm-coder"
+version = "0.1.0"
+edition = "2018"
+
+[dependencies]
+evm-coder-macros = { path = "../evm-coder-macros" }
+primitive-types = { version = "0.9", default-features = false }
+hex-literal = "0.3"
+ethereum = { version = "0.7.1", default-features = false }
+
+[dev-dependencies]
+hex = "0.4.3"
+
+[features]
+default = ["std"]
+std = ["ethereum/std", "primitive-types/std"]
\ No newline at end of file
addedcrates/evm-coder/src/abi.rsdiffbeforeafterboth
--- /dev/null
+++ b/crates/evm-coder/src/abi.rs
@@ -0,0 +1,311 @@
+//! TODO: I misunterstood therminology, abi IS rlp encoded, so
+//! this module should be replaced with rlp crate
+
+#![allow(dead_code)]
+
+#[cfg(not(feature = "std"))]
+use alloc::{
+	string::{String, ToString},
+	vec::Vec,
+};
+use primitive_types::{H160, U256};
+
+use crate::types::string;
+
+const ABI_ALIGNMENT: usize = 32;
+
+pub type Result<T> = core::result::Result<T, &'static str>;
+
+#[derive(Clone)]
+pub struct AbiReader<'i> {
+	buf: &'i [u8],
+	offset: usize,
+}
+impl<'i> AbiReader<'i> {
+	pub fn new(buf: &'i [u8]) -> Self {
+		Self { buf, offset: 0 }
+	}
+	pub fn new_call(buf: &'i [u8]) -> Result<(u32, Self)> {
+		if buf.len() < 4 {
+			return Err("missing method id");
+		}
+		let mut method_id = [0; 4];
+		method_id.copy_from_slice(&buf[0..4]);
+
+		Ok((u32::from_be_bytes(method_id), Self { buf, offset: 4 }))
+	}
+
+	fn read_padleft<const S: usize>(&mut self) -> Result<[u8; S]> {
+		if self.buf.len() - self.offset < 32 {
+			return Err("missing padding");
+		}
+		let mut block = [0; S];
+		// Verify padding is empty
+		if !self.buf[self.offset..self.offset + ABI_ALIGNMENT - S]
+			.iter()
+			.all(|&v| v == 0)
+		{
+			return Err("non zero padding (wrong types?)");
+		}
+		block.copy_from_slice(
+			&self.buf[self.offset + ABI_ALIGNMENT - S..self.offset + ABI_ALIGNMENT],
+		);
+		self.offset += ABI_ALIGNMENT;
+		Ok(block)
+	}
+
+	pub fn address(&mut self) -> Result<H160> {
+		Ok(H160(self.read_padleft()?))
+	}
+
+	pub fn bool(&mut self) -> Result<bool> {
+		let data: [u8; 1] = self.read_padleft()?;
+		match data[0] {
+			0 => Ok(false),
+			1 => Ok(true),
+			_ => Err("wrong bool value"),
+		}
+	}
+
+	pub fn bytes4(&mut self) -> Result<[u8; 4]> {
+		self.read_padleft()
+	}
+
+	pub fn bytes(&mut self) -> Result<Vec<u8>> {
+		let mut subresult = self.subresult()?;
+		let length = subresult.read_usize()?;
+		if subresult.buf.len() <= subresult.offset + length {
+			return Err("bytes out of bounds");
+		}
+		Ok(subresult.buf[subresult.offset..subresult.offset + length].into())
+	}
+
+	pub fn uint32(&mut self) -> Result<u32> {
+		Ok(u32::from_be_bytes(self.read_padleft()?))
+	}
+
+	pub fn uint128(&mut self) -> Result<u128> {
+		Ok(u128::from_be_bytes(self.read_padleft()?))
+	}
+
+	pub fn uint256(&mut self) -> Result<U256> {
+		let buf: [u8; 32] = self.read_padleft()?;
+		Ok(U256::from_big_endian(&buf))
+	}
+
+	pub fn uint64(&mut self) -> Result<u64> {
+		Ok(u64::from_be_bytes(self.read_padleft()?))
+	}
+
+	pub fn read_usize(&mut self) -> Result<usize> {
+		Ok(usize::from_be_bytes(self.read_padleft()?))
+	}
+
+	fn subresult(&mut self) -> Result<AbiReader<'i>> {
+		let offset = self.read_usize()?;
+		Ok(AbiReader {
+			buf: &self.buf,
+			offset: offset + self.offset,
+		})
+	}
+
+	pub fn is_finished(&self) -> bool {
+		self.buf.len() == self.offset
+	}
+}
+
+#[derive(Default)]
+pub struct AbiWriter {
+	static_part: Vec<u8>,
+	dynamic_part: Vec<(usize, AbiWriter)>,
+}
+impl AbiWriter {
+	pub fn new() -> Self {
+		Self::default()
+	}
+	pub fn new_call(method_id: u32) -> Self {
+		let mut val = Self::new();
+		val.static_part.extend(&method_id.to_be_bytes());
+		val
+	}
+
+	fn write_padleft(&mut self, block: &[u8]) {
+		assert!(block.len() <= ABI_ALIGNMENT);
+		self.static_part
+			.extend(&[0; ABI_ALIGNMENT][0..ABI_ALIGNMENT - block.len()]);
+		self.static_part.extend(block);
+	}
+
+	fn write_padright(&mut self, bytes: &[u8]) {
+		assert!(bytes.len() <= ABI_ALIGNMENT);
+		self.static_part.extend(bytes);
+		self.static_part
+			.extend(&[0; ABI_ALIGNMENT][0..ABI_ALIGNMENT - bytes.len()]);
+	}
+
+	pub fn address(&mut self, address: &H160) {
+		self.write_padleft(&address.0)
+	}
+
+	pub fn bool(&mut self, value: &bool) {
+		self.write_padleft(&[if *value { 1 } else { 0 }])
+	}
+
+	pub fn uint8(&mut self, value: &u8) {
+		self.write_padleft(&[*value])
+	}
+
+	pub fn uint32(&mut self, value: &u32) {
+		self.write_padleft(&u32::to_be_bytes(*value))
+	}
+
+	pub fn uint128(&mut self, value: &u128) {
+		self.write_padleft(&u128::to_be_bytes(*value))
+	}
+
+	/// This method writes u128, and exists only for convenience, because there is
+	/// no u256 support in rust
+	pub fn uint256(&mut self, value: &U256) {
+		let mut out = [0; 32];
+		value.to_big_endian(&mut out);
+		self.write_padleft(&out)
+	}
+
+	pub fn write_usize(&mut self, value: &usize) {
+		self.write_padleft(&usize::to_be_bytes(*value))
+	}
+
+	pub fn write_subresult(&mut self, result: Self) {
+		self.dynamic_part.push((self.static_part.len(), result));
+		// Empty block, to be filled later
+		self.write_padleft(&[]);
+	}
+
+	pub fn memory(&mut self, value: &[u8]) {
+		let mut sub = Self::new();
+		sub.write_usize(&value.len());
+		for chunk in value.chunks(ABI_ALIGNMENT) {
+			sub.write_padright(chunk);
+		}
+		self.write_subresult(sub);
+	}
+
+	pub fn string(&mut self, value: &str) {
+		self.memory(value.as_bytes())
+	}
+
+	pub fn finish(mut self) -> Vec<u8> {
+		for (static_offset, part) in self.dynamic_part {
+			let part_offset = self.static_part.len();
+
+			let encoded_dynamic_offset = usize::to_be_bytes(part_offset - static_offset);
+			self.static_part[static_offset + ABI_ALIGNMENT - encoded_dynamic_offset.len()
+				..static_offset + ABI_ALIGNMENT]
+				.copy_from_slice(&encoded_dynamic_offset);
+			self.static_part.extend(part.finish())
+		}
+		self.static_part
+	}
+}
+
+pub trait AbiRead<T> {
+	fn abi_read(&mut self) -> Result<T>;
+}
+
+macro_rules! impl_abi_readable {
+	($ty:ty, $method:ident) => {
+		impl AbiRead<$ty> for AbiReader<'_> {
+			fn abi_read(&mut self) -> Result<$ty> {
+				self.$method()
+			}
+		}
+	};
+}
+
+impl_abi_readable!(u32, uint32);
+impl_abi_readable!(u128, uint128);
+impl_abi_readable!(U256, uint256);
+impl_abi_readable!(H160, address);
+impl_abi_readable!(Vec<u8>, bytes);
+impl_abi_readable!(bool, bool);
+
+pub trait AbiWrite {
+	fn abi_write(&self, writer: &mut AbiWriter);
+}
+
+macro_rules! impl_abi_writeable {
+	($ty:ty, $method:ident) => {
+		impl AbiWrite for $ty {
+			fn abi_write(&self, writer: &mut AbiWriter) {
+				writer.$method(&self)
+			}
+		}
+	};
+}
+
+impl_abi_writeable!(u8, uint8);
+impl_abi_writeable!(u32, uint32);
+impl_abi_writeable!(u128, uint128);
+impl_abi_writeable!(U256, uint256);
+impl_abi_writeable!(H160, address);
+impl_abi_writeable!(bool, bool);
+impl_abi_writeable!(&str, string);
+impl AbiWrite for &string {
+	fn abi_write(&self, writer: &mut AbiWriter) {
+		writer.string(&self)
+	}
+}
+
+impl AbiWrite for () {
+	fn abi_write(&self, _writer: &mut AbiWriter) {}
+}
+
+/// Error, which can be constructed from any ToString type
+/// Encoded to Abi as Error(string)
+#[derive(Debug)]
+pub struct StringError(String);
+
+impl<E> From<E> for StringError
+where
+	E: ToString,
+{
+	fn from(e: E) -> Self {
+		Self(e.to_string())
+	}
+}
+
+impl From<StringError> for AbiWriter {
+	fn from(v: StringError) -> Self {
+		let mut out = AbiWriter::new_call(crate::fn_selector!(Error(string)));
+		out.string(&v.0);
+		out
+	}
+}
+
+#[macro_export]
+macro_rules! abi_decode {
+	($reader:expr, $($name:ident: $typ:ident),+ $(,)?) => {
+		$(
+			let $name = $reader.$typ()?;
+		)+
+	}
+}
+#[macro_export]
+macro_rules! abi_encode {
+	($($typ:ident($value:expr)),* $(,)?) => {{
+		#[allow(unused_mut)]
+		let mut writer = ::evm_coder::abi::AbiWriter::new();
+		$(
+			writer.$typ($value);
+		)*
+		writer
+	}};
+	(call $val:expr; $($typ:ident($value:expr)),* $(,)?) => {{
+		#[allow(unused_mut)]
+		let mut writer = ::evm_coder::abi::AbiWriter::new_call($val);
+		$(
+			writer.$typ($value);
+		)*
+		writer
+	}}
+}
addedcrates/evm-coder/src/events.rsdiffbeforeafterboth
--- /dev/null
+++ b/crates/evm-coder/src/events.rs
@@ -0,0 +1,42 @@
+use ethereum::Log;
+use primitive_types::{H160, H256};
+
+use crate::types::*;
+
+pub trait ToLog {
+	fn to_log(&self, contract: H160) -> Log;
+}
+
+pub trait ToTopic {
+	fn to_topic(&self) -> H256;
+}
+
+impl ToTopic for H256 {
+	fn to_topic(&self) -> H256 {
+		*self
+	}
+}
+
+impl ToTopic for uint256 {
+	fn to_topic(&self) -> H256 {
+		let mut out = [0u8; 32];
+		self.to_big_endian(&mut out);
+		H256(out)
+	}
+}
+
+impl ToTopic for address {
+	fn to_topic(&self) -> H256 {
+		let mut out = [0u8; 32];
+		out[12..32].copy_from_slice(&self.0);
+		H256(out)
+	}
+}
+
+impl ToTopic for uint32 {
+	fn to_topic(&self) -> H256 {
+		let mut out = [0u8; 32];
+		out[28..32].copy_from_slice(&self.to_be_bytes());
+		H256(out)
+	}
+}
addedcrates/evm-coder/src/lib.rsdiffbeforeafterboth
--- /dev/null
+++ b/crates/evm-coder/src/lib.rs
@@ -0,0 +1,69 @@
+#![cfg_attr(not(feature = "std"), no_std)]
+#[cfg(not(feature = "std"))]
+extern crate alloc;
+
+pub use evm_coder_macros::{event_topic, fn_selector, solidity_interface, solidity, ToLog};
+pub mod abi;
+pub mod events;
+pub use events::ToLog;
+
+/// Solidity type definitions
+pub mod types {
+	#![allow(non_camel_case_types)]
+
+	#[cfg(not(feature = "std"))]
+	use alloc::{vec::Vec};
+	use primitive_types::{U256, H160, H256};
+
+	pub type address = H160;
+
+	pub type uint8 = u8;
+	pub type uint16 = u16;
+	pub type uint32 = u32;
+	pub type uint64 = u64;
+	pub type uint128 = u128;
+	pub type uint256 = U256;
+
+	pub type bytes4 = u32;
+
+	pub type topic = H256;
+
+	#[cfg(not(feature = "std"))]
+	pub type string = ::alloc::string::String;
+	#[cfg(feature = "std")]
+	pub type string = ::std::string::String;
+	pub type bytes = Vec<u8>;
+
+	pub type void = ();
+
+	//#region Special types
+	/// Makes function payable
+	pub type value = U256;
+	/// Makes function caller-sensitive
+	pub type caller = address;
+	//#endregion
+
+	pub struct Msg<C> {
+		pub call: C,
+		pub caller: H160,
+		pub value: U256,
+	}
+}
+
+#[cfg(test)]
+mod tests {
+	use super::*;
+
+	#[test]
+	fn function_selector_generation() {
+		assert_eq!(fn_selector!(transfer(address, uint256)), 0xa9059cbb);
+	}
+
+	#[test]
+	fn event_topic_generation() {
+		assert_eq!(
+			hex::encode(&event_topic!(Transfer(address, address, uint256))[..]),
+			"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
+		);
+	}
+}
addedcrates/evm-coder/tests/a.rsdiffbeforeafterboth
--- /dev/null
+++ b/crates/evm-coder/tests/a.rs
@@ -0,0 +1,69 @@
+use evm_coder::{solidity_interface, types::*, ToLog};
+use evm_coder_macros::solidity;
+
+#[solidity_interface]
+trait OurInterface {
+	type Error;
+	fn fn_a(&self, input: uint256) -> Result<bool, Self::Error>;
+}
+
+#[solidity_interface]
+trait OurInterface1 {
+	type Error;
+	fn fn_b(&self, input: uint128) -> Result<uint32, Self::Error>;
+}
+
+#[solidity_interface(is(OurInterface), inline_is(OurInterface1), events(ERC721Log))]
+trait OurInterface2 {
+	type Error;
+	#[solidity(rename_selector = "fnK")]
+	fn fn_c(&self, input: uint32) -> Result<uint8, Self::Error>;
+	fn fn_d(&self, value: uint32) -> Result<uint32, Self::Error>;
+
+	fn caller_sensitive(&self, caller: caller) -> Result<uint8, Self::Error>;
+	fn payable(&mut self, value: value) -> Result<uint8, Self::Error>;
+}
+
+#[derive(ToLog)]
+enum ERC721Log {
+	Transfer {
+		#[indexed]
+		from: address,
+		#[indexed]
+		to: address,
+		value: uint256,
+	},
+	Eee {
+		#[indexed]
+		aaa: address,
+		bbb: uint256,
+	},
+}
+
+#[solidity_interface]
+trait ERC20 {
+	type Error;
+
+	fn decimals(&self) -> Result<uint8, Self::Error>;
+	fn balance_of(&self, owner: address) -> Result<uint256, Self::Error>;
+	fn transfer(
+		&mut self,
+		caller: caller,
+		to: address,
+		value: uint256,
+	) -> Result<bool, Self::Error>;
+	fn transfer_from(
+		&mut self,
+		caller: caller,
+		from: address,
+		to: address,
+		value: uint256,
+	) -> Result<bool, Self::Error>;
+	fn approve(
+		&mut self,
+		caller: caller,
+		spender: address,
+		value: uint256,
+	) -> Result<bool, Self::Error>;
+	fn allowance(&self, owner: address, spender: address) -> Result<uint256, Self::Error>;
+}
deletednode/Cargo.tomldiffbeforeafterboth
--- a/node/Cargo.toml
+++ /dev/null
@@ -1,320 +0,0 @@
-################################################################################
-# Build Dependencies
-
-[build-dependencies.substrate-build-script-utils]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-################################################################################
-# Substrate Dependecies
-
-[dependencies.codec]
-default-features = false
-features = ['derive']
-package = 'parity-scale-codec'
-version = '2.0.0'
-
-[dependencies.frame-benchmarking]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.frame-benchmarking-cli]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.pallet-transaction-payment-rpc]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.substrate-prometheus-endpoint]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '0.9.0'
-
-[dependencies.sc-basic-authorship]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '0.9.0'
-
-[dependencies.sc-chain-spec]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sc-cli]
-features = ['wasmtime']
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '0.9.0'
-
-[dependencies.sc-client-api]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sc-consensus]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '0.9.0'
-
-[dependencies.sc-consensus-aura]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '0.9.0'
-
-[dependencies.sc-executor]
-features = ['wasmtime']
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '0.9.0'
-
-[dependencies.sc-finality-grandpa]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '0.9.0'
-
-[dependencies.sc-keystore]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sc-rpc]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sc-rpc-api]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '0.9.0'
-
-[dependencies.sc-service]
-features = ['wasmtime']
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '0.9.0'
-
-[dependencies.sc-telemetry]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sc-transaction-pool]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sc-tracing]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sp-block-builder]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sp-api]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sp-blockchain]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sp-consensus]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '0.9.0'
-
-[dependencies.sp-consensus-aura]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '0.9.0'
-
-[dependencies.sp-core]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sp-finality-grandpa]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sp-inherents]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sp-keystore]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '0.9.0'
-
-[dependencies.sp-offchain]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sp-runtime]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sp-session]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sp-timestamp]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sp-transaction-pool]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.sp-trie]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.substrate-frame-rpc-system]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.pallet-contracts]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-[dependencies.pallet-contracts-rpc]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '3.0.0'
-
-
-[dependencies.sc-network]
-git = 'https://github.com/paritytech/substrate.git'
-branch = 'polkadot-v0.9.3'
-version = '0.9.0'
-
-[dependencies.serde]
-features = ['derive']
-version = '1.0.119'
-
-[dependencies.serde_json]
-version = '1.0.41'
-
-
-################################################################################
-# Cumulus dependencies
-
-[dependencies.cumulus-client-consensus-aura]
-git = 'https://github.com/paritytech/cumulus.git'
-branch = 'polkadot-v0.9.3'
-
-[dependencies.cumulus-client-consensus-common]
-git = 'https://github.com/paritytech/cumulus.git'
-branch = 'polkadot-v0.9.3'
-
-[dependencies.cumulus-client-collator]
-git = 'https://github.com/paritytech/cumulus.git'
-branch = 'polkadot-v0.9.3'
-
-[dependencies.cumulus-client-cli]
-git = 'https://github.com/paritytech/cumulus.git'
-branch = 'polkadot-v0.9.3'
-
-[dependencies.cumulus-client-network]
-git = 'https://github.com/paritytech/cumulus.git'
-branch = 'polkadot-v0.9.3'
-
-[dependencies.cumulus-primitives-core]
-git = 'https://github.com/paritytech/cumulus.git'
-branch = 'polkadot-v0.9.3'
-
-[dependencies.cumulus-primitives-parachain-inherent]
-git = 'https://github.com/paritytech/cumulus.git'
-branch = 'polkadot-v0.9.3'
-
-[dependencies.cumulus-client-service]
-git = 'https://github.com/paritytech/cumulus.git'
-branch = 'polkadot-v0.9.3'
-
-
-################################################################################
-# Polkadot dependencies
-[dependencies.polkadot-primitives]
-git = "https://github.com/paritytech/polkadot"
-branch = 'release-v0.9.3'
-
-[dependencies.polkadot-service]
-git = "https://github.com/paritytech/polkadot"
-branch = 'release-v0.9.3'
-
-[dependencies.polkadot-cli]
-git = "https://github.com/paritytech/polkadot"
-branch = 'release-v0.9.3'
-
-[dependencies.polkadot-test-service]
-git = "https://github.com/paritytech/polkadot"
-branch = 'release-v0.9.3'
-
-[dependencies.polkadot-parachain]
-git = "https://github.com/paritytech/polkadot"
-branch = 'release-v0.9.3'
-
-
-################################################################################
-# Local dependencies
-
-[dependencies.nft-runtime]
-path = '../runtime'
-version = '3.0.0'
-
-[dependencies.nft-data-structs]
-path="../primitives"
-default-features = false
-
-################################################################################
-# Package 
-
-[package]
-authors = ['Unique Network <support@uniquenetwork.io>']
-build = 'build.rs'
-description = 'Substrate node nft'
-edition = '2018'
-homepage = 'https://unique.network'
-license = 'All Rights Reserved'
-name = 'nft'
-repository = 'https://github.com/usetech-llc/nft_private/'
-version = '3.0.0'
-
-[[bin]]
-name = 'nft'
-
-[package.metadata.docs.rs]
-targets = ['x86_64-unknown-linux-gnu']
-
-[dependencies]
-futures = '0.3.4'
-log = '0.4.8'
-flexi_logger = "0.15.7"
-parking_lot = '0.10.0'
-structopt = '0.3.8'
-jsonrpc-core = '15.0.0'
-
-[features]
-default = []
-runtime-benchmarks = ['nft-runtime/runtime-benchmarks']
deletednode/build.rsdiffbeforeafterboth
--- a/node/build.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
-
-use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed};
-
-fn main() {
-    generate_cargo_keys();
-
-    rerun_if_git_head_changed();
-}
addednode/cli/Cargo.tomldiffbeforeafterboth
--- /dev/null
+++ b/node/cli/Cargo.toml
@@ -0,0 +1,331 @@
+################################################################################
+# Build Dependencies
+
+[build-dependencies.substrate-build-script-utils]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+################################################################################
+# Substrate Dependecies
+
+[dependencies.codec]
+default-features = false
+features = ['derive']
+package = 'parity-scale-codec'
+version = '2.0.0'
+
+[dependencies.frame-benchmarking]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.frame-benchmarking-cli]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.pallet-transaction-payment-rpc]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.substrate-prometheus-endpoint]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '0.9.0'
+
+[dependencies.sc-basic-authorship]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '0.9.0'
+
+[dependencies.sc-chain-spec]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sc-cli]
+features = ['wasmtime']
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '0.9.0'
+
+[dependencies.sc-client-api]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sc-consensus]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '0.9.0'
+
+[dependencies.sc-consensus-aura]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '0.9.0'
+
+[dependencies.sc-executor]
+features = ['wasmtime']
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '0.9.0'
+
+[dependencies.sc-finality-grandpa]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '0.9.0'
+
+[dependencies.sc-keystore]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sc-rpc]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sc-rpc-api]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '0.9.0'
+
+[dependencies.sc-service]
+features = ['wasmtime']
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '0.9.0'
+
+[dependencies.sc-telemetry]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sc-transaction-pool]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sc-tracing]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sp-block-builder]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sp-api]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sp-blockchain]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sp-consensus]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '0.9.0'
+
+[dependencies.sp-consensus-aura]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '0.9.0'
+
+[dependencies.sp-core]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sp-finality-grandpa]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sp-inherents]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sp-keystore]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '0.9.0'
+
+[dependencies.sp-offchain]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sp-runtime]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sp-session]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sp-timestamp]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sp-transaction-pool]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.sp-trie]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.substrate-frame-rpc-system]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.pallet-contracts]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+[dependencies.pallet-contracts-rpc]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '3.0.0'
+
+
+[dependencies.sc-network]
+git = 'https://github.com/paritytech/substrate.git'
+branch = 'polkadot-v0.9.3'
+version = '0.9.0'
+
+[dependencies.serde]
+features = ['derive']
+version = '1.0.119'
+
+[dependencies.serde_json]
+version = '1.0.41'
+
+
+################################################################################
+# Cumulus dependencies
+
+[dependencies.cumulus-client-consensus-aura]
+git = 'https://github.com/paritytech/cumulus.git'
+branch = 'polkadot-v0.9.3'
+
+[dependencies.cumulus-client-consensus-common]
+git = 'https://github.com/paritytech/cumulus.git'
+branch = 'polkadot-v0.9.3'
+
+[dependencies.cumulus-client-collator]
+git = 'https://github.com/paritytech/cumulus.git'
+branch = 'polkadot-v0.9.3'
+
+[dependencies.cumulus-client-cli]
+git = 'https://github.com/paritytech/cumulus.git'
+branch = 'polkadot-v0.9.3'
+
+[dependencies.cumulus-client-network]
+git = 'https://github.com/paritytech/cumulus.git'
+branch = 'polkadot-v0.9.3'
+
+[dependencies.cumulus-primitives-core]
+git = 'https://github.com/paritytech/cumulus.git'
+branch = 'polkadot-v0.9.3'
+
+[dependencies.cumulus-primitives-parachain-inherent]
+git = 'https://github.com/paritytech/cumulus.git'
+branch = 'polkadot-v0.9.3'
+
+[dependencies.cumulus-client-service]
+git = 'https://github.com/paritytech/cumulus.git'
+branch = 'polkadot-v0.9.3'
+
+
+################################################################################
+# Polkadot dependencies
+[dependencies.polkadot-primitives]
+git = "https://github.com/paritytech/polkadot"
+branch = 'release-v0.9.3'
+
+[dependencies.polkadot-service]
+git = "https://github.com/paritytech/polkadot"
+branch = 'release-v0.9.3'
+
+[dependencies.polkadot-cli]
+git = "https://github.com/paritytech/polkadot"
+branch = 'release-v0.9.3'
+
+[dependencies.polkadot-test-service]
+git = "https://github.com/paritytech/polkadot"
+branch = 'release-v0.9.3'
+
+[dependencies.polkadot-parachain]
+git = "https://github.com/paritytech/polkadot"
+branch = 'release-v0.9.3'
+
+
+################################################################################
+# Local dependencies
+
+[dependencies.nft-runtime]
+path = '../../runtime'
+version = '3.0.0'
+
+[dependencies.nft-data-structs]
+path="../../primitives"
+default-features = false
+
+################################################################################
+# Package 
+
+[package]
+authors = ['Unique Network <support@uniquenetwork.io>']
+build = 'build.rs'
+description = 'Substrate node nft'
+edition = '2018'
+homepage = 'https://unique.network'
+license = 'All Rights Reserved'
+name = 'nft'
+repository = 'https://github.com/usetech-llc/nft_private/'
+version = '3.0.0'
+
+[[bin]]
+name = 'nft'
+
+[package.metadata.docs.rs]
+targets = ['x86_64-unknown-linux-gnu']
+
+[dependencies]
+futures = '0.3.4'
+log = '0.4.8'
+flexi_logger = "0.15.7"
+parking_lot = '0.10.0'
+structopt = '0.3.8'
+jsonrpc-core = '15.0.0'
+jsonrpc-pubsub = "15.0.0"
+
+fc-rpc-core = { version = "1.1.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+fc-consensus = { version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+fc-mapping-sync = { version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+fc-rpc = { version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+fc-db = { version = "1.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+fp-rpc = { version = "2.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+pallet-ethereum = { version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+
+nft-rpc = { path = "../rpc" }
+
+[features]
+default = []
+runtime-benchmarks = ['nft-runtime/runtime-benchmarks']
addednode/cli/build.rsdiffbeforeafterboth
--- /dev/null
+++ b/node/cli/build.rs
@@ -0,0 +1,12 @@
+//
+// This file is subject to the terms and conditions defined in
+// file 'LICENSE', which is part of this source code package.
+//
+
+use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed};
+
+fn main() {
+    generate_cargo_keys();
+
+    rerun_if_git_head_changed();
+}
addednode/cli/src/chain_spec.rsdiffbeforeafterboth
--- /dev/null
+++ b/node/cli/src/chain_spec.rs
@@ -0,0 +1,224 @@
+//
+// This file is subject to the terms and conditions defined in
+// file 'LICENSE', which is part of this source code package.
+//
+
+use cumulus_primitives_core::ParaId;
+use nft_runtime::*;
+use nft_data_structs::*;
+use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};
+use sc_service::ChainType;
+use sp_core::{sr25519, Pair, Public};
+use sp_runtime::traits::{IdentifyAccount, Verify};
+use std::collections::BTreeMap;
+
+use serde::{Deserialize, Serialize};
+use serde_json::map::Map;
+
+/// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type.
+pub type ChainSpec = sc_service::GenericChainSpec<nft_runtime::GenesisConfig, Extensions>;
+
+/// Helper function to generate a crypto pair from seed
+pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
+	TPublic::Pair::from_string(&format!("//{}", seed), None)
+		.expect("static values are valid; qed")
+		.public()
+}
+
+/// The extensions for the [`ChainSpec`].
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)]
+#[serde(deny_unknown_fields)]
+pub struct Extensions {
+	/// The relay chain of the Parachain.
+	pub relay_chain: String,
+	/// The id of the Parachain.
+	pub para_id: u32,
+}
+
+impl Extensions {
+	/// Try to get the extension from the given `ChainSpec`.
+	pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> {
+		sc_chain_spec::get_extension(chain_spec.extensions())
+	}
+}
+
+type AccountPublic = <Signature as Verify>::Signer;
+
+/// Helper function to generate an account ID from seed
+pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
+where
+	AccountPublic: From<<TPublic::Pair as Pair>::Public>,
+{
+	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
+}
+
+pub fn development_config(id: ParaId) -> ChainSpec {
+	let mut properties = Map::new();
+	properties.insert("tokenSymbol".into(), "testUNQ".into());
+	properties.insert("tokenDecimals".into(), 15.into());
+	properties.insert("ss58Format".into(), 42.into()); // Generic Substrate wildcard (SS58 checksum preimage)
+
+	ChainSpec::from_genesis(
+		// Name
+		"Development",
+		// ID
+		"dev",
+		ChainType::Local,
+		move || testnet_genesis(
+			// Sudo account
+			get_account_id_from_seed::<sr25519::Public>("Alice"),
+			vec![
+				get_from_seed::<AuraId>("Alice"),
+				get_from_seed::<AuraId>("Bob"),
+			],
+			// Pre-funded accounts
+			vec![
+				get_account_id_from_seed::<sr25519::Public>("Alice"),
+				get_account_id_from_seed::<sr25519::Public>("Bob"),
+			],
+			id,
+		),
+		// Bootnodes
+		vec![],
+		// Telemetry
+		None,
+		// Protocol ID
+		None,
+		// Properties
+		Some(properties),
+		// Extensions
+		Extensions {
+			relay_chain: "rococo-dev".into(),
+			para_id: id.into(),
+		},
+	)
+}
+
+pub fn local_testnet_config(id: ParaId) -> ChainSpec {
+	ChainSpec::from_genesis(
+		// Name
+		"Local Testnet",
+		// ID
+		"local_testnet",
+		ChainType::Local,
+		move || testnet_genesis(
+			// Sudo account
+			get_account_id_from_seed::<sr25519::Public>("Alice"),
+			vec![
+				get_from_seed::<AuraId>("Alice"),
+				get_from_seed::<AuraId>("Bob"),
+			],
+			// Pre-funded accounts
+			vec![
+				get_account_id_from_seed::<sr25519::Public>("Alice"),
+				get_account_id_from_seed::<sr25519::Public>("Bob"),
+				get_account_id_from_seed::<sr25519::Public>("Charlie"),
+				get_account_id_from_seed::<sr25519::Public>("Dave"),
+				get_account_id_from_seed::<sr25519::Public>("Eve"),
+				get_account_id_from_seed::<sr25519::Public>("Ferdie"),
+				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
+			],
+			id,
+		),
+		// Bootnodes
+		vec![],
+		// Telemetry
+		None,
+		// Protocol ID
+		None,
+		// Properties
+		None,
+		// Extensions
+		Extensions {
+			relay_chain: "rococo-local".into(),
+			para_id: id.into(),
+		},
+	)
+}
+
+fn testnet_genesis(
+    root_key: AccountId,
+	initial_authorities: Vec<AuraId>,
+    endowed_accounts: Vec<AccountId>,
+	id: ParaId,
+) -> GenesisConfig {
+
+	let vested_accounts = vec![
+		get_account_id_from_seed::<sr25519::Public>("Bob"),
+	];
+
+    GenesisConfig {
+		system: nft_runtime::SystemConfig {
+			code: nft_runtime::WASM_BINARY
+				.expect("WASM binary was not build, please build it!")
+				.to_vec(),
+			changes_trie_config: Default::default(),
+		},
+        pallet_balances: BalancesConfig {
+            balances: endowed_accounts
+                .iter()
+                .cloned()
+                .map(|k| (k, 1 << 70))
+                .collect(),
+        },
+		pallet_treasury: Default::default(),
+		pallet_sudo: SudoConfig { key: root_key },
+		pallet_vesting: VestingConfig {
+            vesting: vested_accounts
+                .iter()
+                .cloned()
+                .map(|k| (k, 1000, 100, 1 << 98))
+                .collect(),
+        },
+        pallet_nft: NftConfig {
+            collection_id: vec![(
+                1,
+                Collection {
+                    owner: get_account_id_from_seed::<sr25519::Public>("Alice"),
+                    mode: CollectionMode::NFT,
+                    access: AccessMode::Normal,
+                    decimal_points: 0,
+                    name: vec![],
+                    description: vec![],
+                    token_prefix: vec![],
+                    mint_mode: false,
+					offchain_schema: vec![],
+					schema_version: SchemaVersion::default(),
+                    sponsorship: SponsorshipState::Confirmed(get_account_id_from_seed::<sr25519::Public>("Alice")),
+                    const_on_chain_schema: vec![],
+					variable_on_chain_schema: vec![],
+					limits: CollectionLimits::default()
+                },
+            )],
+            nft_item_id: vec![],
+            fungible_item_id: vec![],
+            refungible_item_id: vec![],
+            chain_limit: ChainLimits {
+                collection_numbers_limit: 100000,
+                account_token_ownership_limit: 1000000,
+                collections_admins_limit: 5,
+                custom_data_limit: 2048,
+                nft_sponsor_transfer_timeout: 15,
+                fungible_sponsor_transfer_timeout: 15,
+				refungible_sponsor_transfer_timeout: 15,
+				offchain_schema_limit: 1024,
+				variable_on_chain_schema_limit: 1024,
+				const_on_chain_schema_limit: 1024,
+            },
+        },
+		parachain_info: nft_runtime::ParachainInfoConfig { parachain_id: id },
+		pallet_aura: nft_runtime::AuraConfig {
+			authorities: initial_authorities,
+		},
+		cumulus_pallet_aura_ext: Default::default(),
+		pallet_evm: EVMConfig {
+			accounts: BTreeMap::new(),
+		},
+		pallet_ethereum: EthereumConfig {},
+    }
+}
addednode/cli/src/cli.rsdiffbeforeafterboth
--- /dev/null
+++ b/node/cli/src/cli.rs
@@ -0,0 +1,130 @@
+use crate::chain_spec;
+use cumulus_client_cli;
+use sc_cli;
+use std::path::PathBuf;
+use structopt::StructOpt;
+
+/// Sub-commands supported by the collator.
+#[derive(Debug, StructOpt)]
+pub enum Subcommand {
+	/// Export the genesis state of the parachain.
+	#[structopt(name = "export-genesis-state")]
+	ExportGenesisState(ExportGenesisStateCommand),
+
+	/// Export the genesis wasm of the parachain.
+	#[structopt(name = "export-genesis-wasm")]
+	ExportGenesisWasm(ExportGenesisWasmCommand),
+
+	/// Build a chain specification.
+	BuildSpec(sc_cli::BuildSpecCmd),
+
+	/// Validate blocks.
+	CheckBlock(sc_cli::CheckBlockCmd),
+
+	/// Export blocks.
+	ExportBlocks(sc_cli::ExportBlocksCmd),
+
+	/// Export the state of a given block into a chain spec.
+	ExportState(sc_cli::ExportStateCmd),
+
+	/// Import blocks.
+	ImportBlocks(sc_cli::ImportBlocksCmd),
+
+	/// Remove the whole chain.
+	PurgeChain(cumulus_client_cli::PurgeChainCmd),
+
+	/// Revert the chain to a previous state.
+	Revert(sc_cli::RevertCmd),
+
+	/// The custom benchmark subcommmand benchmarking runtime pallets.
+	#[structopt(name = "benchmark", about = "Benchmark runtime pallets.")]
+	Benchmark(frame_benchmarking_cli::BenchmarkCmd),
+}
+
+/// Command for exporting the genesis state of the parachain
+#[derive(Debug, StructOpt)]
+pub struct ExportGenesisStateCommand {
+	/// Output file name or stdout if unspecified.
+	#[structopt(parse(from_os_str))]
+	pub output: Option<PathBuf>,
+
+	/// Id of the parachain this state is for.
+	///
+	/// Default: 100
+	#[structopt(long, conflicts_with = "chain")]
+	pub parachain_id: Option<u32>,
+
+	/// Write output in binary. Default is to write in hex.
+	#[structopt(short, long)]
+	pub raw: bool,
+
+	/// The name of the chain for that the genesis state should be exported.
+	#[structopt(long, conflicts_with = "parachain-id")]
+	pub chain: Option<String>,
+}
+
+/// Command for exporting the genesis wasm file.
+#[derive(Debug, StructOpt)]
+pub struct ExportGenesisWasmCommand {
+	/// Output file name or stdout if unspecified.
+	#[structopt(parse(from_os_str))]
+	pub output: Option<PathBuf>,
+
+	/// Write output in binary. Default is to write in hex.
+	#[structopt(short, long)]
+	pub raw: bool,
+
+	/// The name of the chain for that the genesis wasm file should be exported.
+	#[structopt(long)]
+	pub chain: Option<String>,
+}
+
+#[derive(Debug, StructOpt)]
+#[structopt(settings = &[
+	structopt::clap::AppSettings::GlobalVersion,
+	structopt::clap::AppSettings::ArgsNegateSubcommands,
+	structopt::clap::AppSettings::SubcommandsNegateReqs,
+])]
+pub struct Cli {
+	#[structopt(subcommand)]
+	pub subcommand: Option<Subcommand>,
+
+	#[structopt(flatten)]
+	pub run: cumulus_client_cli::RunCmd,
+
+	/// Relaychain arguments
+	#[structopt(raw = true)]
+	pub relaychain_args: Vec<String>,
+}
+
+#[derive(Debug)]
+pub struct RelayChainCli {
+	/// The actual relay chain cli object.
+	pub base: polkadot_cli::RunCmd,
+
+	/// Optional chain id that should be passed to the relay chain.
+	pub chain_id: Option<String>,
+
+	/// The base path that should be used by the relay chain.
+	pub base_path: Option<PathBuf>,
+}
+
+impl RelayChainCli {
+	/// Parse the relay chain CLI parameters using the para chain `Configuration`.
+	pub fn new<'a>(
+		para_config: &sc_service::Configuration,
+		relay_chain_args: impl Iterator<Item = &'a String>,
+	) -> Self {
+		let extension = chain_spec::Extensions::try_get(&*para_config.chain_spec);
+		let chain_id = extension.map(|e| e.relay_chain.clone());
+		let base_path = para_config
+			.base_path
+			.as_ref()
+			.map(|x| x.path().join("polkadot"));
+		Self {
+			base_path,
+			chain_id,
+			base: polkadot_cli::RunCmd::from_iter(relay_chain_args),
+		}
+	}
+}
addednode/cli/src/command.rsdiffbeforeafterboth
--- /dev/null
+++ b/node/cli/src/command.rs
@@ -0,0 +1,446 @@
+// This file is part of Substrate.
+
+// Copyright (C) 2017-2021 Parity Technologies (UK) Ltd.
+// SPDX-License-Identifier: Apache-2.0
+
+// 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.
+
+use crate::{
+	chain_spec,
+	cli::{Cli, RelayChainCli, Subcommand},
+	service::{new_partial, ParachainRuntimeExecutor}
+};
+use codec::Encode;
+use cumulus_primitives_core::ParaId;
+use cumulus_client_service::genesis::generate_genesis_block;
+use log::info;
+use nft_runtime::Block;
+use polkadot_parachain::primitives::AccountIdConversion;
+use sc_cli::{
+	ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams,
+	NetworkParams, Result, RuntimeVersion, SharedParams, SubstrateCli,
+};
+use sc_service::{
+	config::{BasePath, PrometheusConfig}
+};
+use sp_core::hexdisplay::HexDisplay;
+use sp_runtime::traits::Block as BlockT;
+use std::{io::Write, net::SocketAddr};
+
+fn load_spec(
+	id: &str,
+	para_id: ParaId,
+) -> std::result::Result<Box<dyn sc_service::ChainSpec>, String> {
+	Ok(match id {
+		"dev" => Box::new(chain_spec::development_config(para_id)),
+		"" | "local" => Box::new(chain_spec::local_testnet_config(para_id)),
+		path => Box::new(chain_spec::ChainSpec::from_json_file(
+			std::path::PathBuf::from(path),
+		)?),
+	})
+}
+
+impl SubstrateCli for Cli {
+	fn impl_name() -> String {
+		"Parachain Collator Template".into()
+	}
+
+	fn impl_version() -> String {
+		env!("SUBSTRATE_CLI_IMPL_VERSION").into()
+	}
+
+	fn description() -> String {
+		format!(
+			"Parachain Collator Template\n\nThe command-line arguments provided first will be \
+		passed to the parachain node, while the arguments provided after -- will be passed \
+		to the relaychain node.\n\n\
+		{} [parachain-args] -- [relaychain-args]",
+			Self::executable_name()
+		)
+	}
+
+	fn author() -> String {
+		env!("CARGO_PKG_AUTHORS").into()
+	}
+
+	fn support_url() -> String {
+		"https://github.com/substrate-developer-hub/substrate-parachain-template/issues/new".into()
+	}
+
+	fn copyright_start_year() -> i32 {
+		2017
+	}
+
+	fn load_spec(&self, id: &str) -> std::result::Result<Box<dyn sc_service::ChainSpec>, String> {
+		load_spec(id, self.run.parachain_id.unwrap_or(200).into())
+	}
+
+	fn native_runtime_version(_: &Box<dyn ChainSpec>) -> &'static RuntimeVersion {
+		&nft_runtime::VERSION
+	}
+}
+
+impl SubstrateCli for RelayChainCli {
+	fn impl_name() -> String {
+		"Parachain Collator Template".into()
+	}
+
+	fn impl_version() -> String {
+		env!("SUBSTRATE_CLI_IMPL_VERSION").into()
+	}
+
+	fn description() -> String {
+		"Parachain Collator Template\n\nThe command-line arguments provided first will be \
+		passed to the parachain node, while the arguments provided after -- will be passed \
+		to the relaychain node.\n\n\
+		parachain-collator [parachain-args] -- [relaychain-args]"
+			.into()
+	}
+
+	fn author() -> String {
+		env!("CARGO_PKG_AUTHORS").into()
+	}
+
+	fn support_url() -> String {
+		"https://github.com/substrate-developer-hub/substrate-parachain-template/issues/new".into()
+	}
+
+	fn copyright_start_year() -> i32 {
+		2017
+	}
+
+	fn load_spec(&self, id: &str) -> std::result::Result<Box<dyn sc_service::ChainSpec>, String> {
+		polkadot_cli::Cli::from_iter([RelayChainCli::executable_name().to_string()].iter())
+			.load_spec(id)
+	}
+
+	fn native_runtime_version(chain_spec: &Box<dyn ChainSpec>) -> &'static RuntimeVersion {
+		polkadot_cli::Cli::native_runtime_version(chain_spec)
+	}
+}
+
+fn extract_genesis_wasm(chain_spec: &Box<dyn sc_service::ChainSpec>) -> Result<Vec<u8>> {
+	let mut storage = chain_spec.build_storage()?;
+
+	storage
+		.top
+		.remove(sp_core::storage::well_known_keys::CODE)
+		.ok_or_else(|| "Could not find wasm file in genesis state!".into())
+}
+
+macro_rules! construct_async_run {
+	(|$components:ident, $cli:ident, $cmd:ident, $config:ident| $( $code:tt )* ) => {{
+		let runner = $cli.create_runner($cmd)?;
+		runner.async_run(|$config| {
+			let $components = new_partial::<
+				_
+			>(
+				&$config,
+				crate::service::parachain_build_import_queue,
+			)?;
+			let task_manager = $components.task_manager;
+			{ $( $code )* }.map(|v| (v, task_manager))
+		})
+	}}
+}
+
+/// Parse command line arguments into service configuration.
+pub fn run() -> Result<()> {
+	let cli = Cli::from_args();
+
+	match &cli.subcommand {
+		Some(Subcommand::BuildSpec(cmd)) => {
+			let runner = cli.create_runner(cmd)?;
+			runner.sync_run(|config| cmd.run(config.chain_spec, config.network))
+		}
+		Some(Subcommand::CheckBlock(cmd)) => {
+			construct_async_run!(|components, cli, cmd, config| {
+				Ok(cmd.run(components.client, components.import_queue))
+			})
+		}
+		Some(Subcommand::ExportBlocks(cmd)) => {
+			construct_async_run!(|components, cli, cmd, config| {
+				Ok(cmd.run(components.client, config.database))
+			})
+		}
+		Some(Subcommand::ExportState(cmd)) => {
+			construct_async_run!(|components, cli, cmd, config| {
+				Ok(cmd.run(components.client, config.chain_spec))
+			})
+		}
+		Some(Subcommand::ImportBlocks(cmd)) => {
+			construct_async_run!(|components, cli, cmd, config| {
+				Ok(cmd.run(components.client, components.import_queue))
+			})
+		}
+		Some(Subcommand::PurgeChain(cmd)) => {
+			let runner = cli.create_runner(cmd)?;
+
+			runner.sync_run(|config| {
+				let polkadot_cli = RelayChainCli::new(
+					&config,
+					[RelayChainCli::executable_name().to_string()]
+						.iter()
+						.chain(cli.relaychain_args.iter()),
+				);
+
+				let polkadot_config = SubstrateCli::create_configuration(
+					&polkadot_cli,
+					&polkadot_cli,
+					config.task_executor.clone(),
+				)
+				.map_err(|err| format!("Relay chain argument error: {}", err))?;
+
+				cmd.run(config, polkadot_config)
+			})
+		}
+		Some(Subcommand::Revert(cmd)) => construct_async_run!(|components, cli, cmd, config| {
+			Ok(cmd.run(components.client, components.backend))
+		}),
+		Some(Subcommand::ExportGenesisState(params)) => {
+			let mut builder = sc_cli::LoggerBuilder::new("");
+			builder.with_profiling(sc_tracing::TracingReceiver::Log, "");
+			let _ = builder.init();
+
+			let block: Block = generate_genesis_block(&load_spec(
+				&params.chain.clone().unwrap_or_default(),
+				params.parachain_id.unwrap_or(200).into(),
+			)?)?;
+			let raw_header = block.header().encode();
+			let output_buf = if params.raw {
+				raw_header
+			} else {
+				format!("0x{:?}", HexDisplay::from(&block.header().encode())).into_bytes()
+			};
+
+			if let Some(output) = &params.output {
+				std::fs::write(output, output_buf)?;
+			} else {
+				std::io::stdout().write_all(&output_buf)?;
+			}
+
+			Ok(())
+		}
+		Some(Subcommand::ExportGenesisWasm(params)) => {
+			let mut builder = sc_cli::LoggerBuilder::new("");
+			builder.with_profiling(sc_tracing::TracingReceiver::Log, "");
+			let _ = builder.init();
+
+			let raw_wasm_blob =
+				extract_genesis_wasm(&cli.load_spec(&params.chain.clone().unwrap_or_default())?)?;
+			let output_buf = if params.raw {
+				raw_wasm_blob
+			} else {
+				format!("0x{:?}", HexDisplay::from(&raw_wasm_blob)).into_bytes()
+			};
+
+			if let Some(output) = &params.output {
+				std::fs::write(output, output_buf)?;
+			} else {
+				std::io::stdout().write_all(&output_buf)?;
+			}
+
+			Ok(())
+		},
+		Some(Subcommand::Benchmark(cmd)) => {
+			if cfg!(feature = "runtime-benchmarks") {
+				let runner = cli.create_runner(cmd)?;
+
+				runner.sync_run(|config| cmd.run::<Block, ParachainRuntimeExecutor>(config))
+			} else {
+				Err("Benchmarking wasn't enabled when building the node. \
+				You can enable it with `--features runtime-benchmarks`.".into())
+			}
+		},
+		None => {
+			let runner = cli.create_runner(&cli.run.normalize())?;
+
+			runner.run_node_until_exit(|config| async move {
+				// TODO
+				let key = sp_core::Pair::generate().0;
+
+				let para_id =
+					chain_spec::Extensions::try_get(&*config.chain_spec).map(|e| e.para_id);
+
+				let polkadot_cli = RelayChainCli::new(
+					&config,
+					[RelayChainCli::executable_name().to_string()]
+						.iter()
+						.chain(cli.relaychain_args.iter()),
+				);
+
+				let id = ParaId::from(cli.run.parachain_id.or(para_id).unwrap_or(200));
+
+				let parachain_account =
+					AccountIdConversion::<polkadot_primitives::v0::AccountId>::into_account(&id);
+
+				let block: Block =
+					generate_genesis_block(&config.chain_spec).map_err(|e| format!("{:?}", e))?;
+				let genesis_state = format!("0x{:?}", HexDisplay::from(&block.header().encode()));
+
+				let task_executor = config.task_executor.clone();
+				let polkadot_config = SubstrateCli::create_configuration(
+					&polkadot_cli,
+					&polkadot_cli,
+					task_executor,
+				)
+				.map_err(|err| format!("Relay chain argument error: {}", err))?;
+
+				info!("Parachain id: {:?}", id);
+				info!("Parachain Account: {}", parachain_account);
+				info!("Parachain genesis state: {}", genesis_state);
+				info!(
+					"Is collating: {}",
+					if config.role.is_authority() {
+						"yes"
+					} else {
+						"no"
+					}
+				);
+
+				crate::service::start_node(config, key, polkadot_config, id)
+					.await
+					.map(|r| r.0)
+					.map_err(Into::into)
+			})
+		}
+	}
+}
+
+impl DefaultConfigurationValues for RelayChainCli {
+	fn p2p_listen_port() -> u16 {
+		30334
+	}
+
+	fn rpc_ws_listen_port() -> u16 {
+		9945
+	}
+
+	fn rpc_http_listen_port() -> u16 {
+		9934
+	}
+
+	fn prometheus_listen_port() -> u16 {
+		9616
+	}
+}
+
+impl CliConfiguration<Self> for RelayChainCli {
+	fn shared_params(&self) -> &SharedParams {
+		self.base.base.shared_params()
+	}
+
+	fn import_params(&self) -> Option<&ImportParams> {
+		self.base.base.import_params()
+	}
+
+	fn network_params(&self) -> Option<&NetworkParams> {
+		self.base.base.network_params()
+	}
+
+	fn keystore_params(&self) -> Option<&KeystoreParams> {
+		self.base.base.keystore_params()
+	}
+
+	fn base_path(&self) -> Result<Option<BasePath>> {
+		Ok(self
+			.shared_params()
+			.base_path()
+			.or_else(|| self.base_path.clone().map(Into::into)))
+	}
+
+	fn rpc_http(&self, default_listen_port: u16) -> Result<Option<SocketAddr>> {
+		self.base.base.rpc_http(default_listen_port)
+	}
+
+	fn rpc_ipc(&self) -> Result<Option<String>> {
+		self.base.base.rpc_ipc()
+	}
+
+	fn rpc_ws(&self, default_listen_port: u16) -> Result<Option<SocketAddr>> {
+		self.base.base.rpc_ws(default_listen_port)
+	}
+
+	fn prometheus_config(&self, default_listen_port: u16) -> Result<Option<PrometheusConfig>> {
+		self.base.base.prometheus_config(default_listen_port)
+	}
+
+	fn init<C: SubstrateCli>(&self) -> Result<()> {
+		unreachable!("PolkadotCli is never initialized; qed");
+	}
+
+	fn chain_id(&self, is_dev: bool) -> Result<String> {
+		let chain_id = self.base.base.chain_id(is_dev)?;
+
+		Ok(if chain_id.is_empty() {
+			self.chain_id.clone().unwrap_or_default()
+		} else {
+			chain_id
+		})
+	}
+
+	fn role(&self, is_dev: bool) -> Result<sc_service::Role> {
+		self.base.base.role(is_dev)
+	}
+
+	fn transaction_pool(&self) -> Result<sc_service::config::TransactionPoolOptions> {
+		self.base.base.transaction_pool()
+	}
+
+	fn state_cache_child_ratio(&self) -> Result<Option<usize>> {
+		self.base.base.state_cache_child_ratio()
+	}
+
+	fn rpc_methods(&self) -> Result<sc_service::config::RpcMethods> {
+		self.base.base.rpc_methods()
+	}
+
+	fn rpc_ws_max_connections(&self) -> Result<Option<usize>> {
+		self.base.base.rpc_ws_max_connections()
+	}
+
+	fn rpc_cors(&self, is_dev: bool) -> Result<Option<Vec<String>>> {
+		self.base.base.rpc_cors(is_dev)
+	}
+
+	fn telemetry_external_transport(&self) -> Result<Option<sc_service::config::ExtTransport>> {
+		self.base.base.telemetry_external_transport()
+	}
+
+	fn default_heap_pages(&self) -> Result<Option<u64>> {
+		self.base.base.default_heap_pages()
+	}
+
+	fn force_authoring(&self) -> Result<bool> {
+		self.base.base.force_authoring()
+	}
+
+	fn disable_grandpa(&self) -> Result<bool> {
+		self.base.base.disable_grandpa()
+	}
+
+	fn max_runtime_instances(&self) -> Result<Option<usize>> {
+		self.base.base.max_runtime_instances()
+	}
+
+	fn announce_block(&self) -> Result<bool> {
+		self.base.base.announce_block()
+	}
+
+	fn telemetry_endpoints(
+		&self,
+		chain_spec: &Box<dyn ChainSpec>,
+	) -> Result<Option<sc_telemetry::TelemetryEndpoints>> {
+		self.base.base.telemetry_endpoints(chain_spec)
+	}
+}
\ No newline at end of file
addednode/cli/src/lib.rsdiffbeforeafterboth
--- /dev/null
+++ b/node/cli/src/lib.rs
@@ -0,0 +1,2 @@
+pub mod chain_spec;
+pub mod service;
addednode/cli/src/main.rsdiffbeforeafterboth
--- /dev/null
+++ b/node/cli/src/main.rs
@@ -0,0 +1,14 @@
+//
+// This file is subject to the terms and conditions defined in
+// file 'LICENSE', which is part of this source code package.
+//
+
+mod chain_spec;
+#[macro_use]
+mod service;
+mod cli;
+mod command;
+
+fn main() -> sc_cli::Result<()> {
+	command::run()
+}
addednode/cli/src/service.rsdiffbeforeafterboth
--- /dev/null
+++ b/node/cli/src/service.rs
@@ -0,0 +1,496 @@
+//! Service and ServiceFactory implementation. Specialized wrapper over substrate service.
+
+//
+// This file is subject to the terms and conditions defined in
+// file 'LICENSE', which is part of this source code package.
+//
+
+// std
+use std::sync::Arc;
+use std::sync::Mutex;
+use std::collections::BTreeMap;
+use std::collections::HashMap;
+
+// Local Runtime Types
+use nft_runtime::RuntimeApi;
+
+// Cumulus Imports
+use cumulus_client_consensus_aura::{
+	build_aura_consensus, BuildAuraConsensusParams, SlotProportion,
+};
+use cumulus_client_consensus_common::ParachainConsensus;
+use cumulus_client_network::build_block_announce_validator;
+use cumulus_client_service::{
+	prepare_node_config, start_collator, start_full_node, StartCollatorParams, StartFullNodeParams,
+};
+use cumulus_primitives_core::ParaId;
+
+// Polkadot Imports
+use polkadot_primitives::v1::CollatorPair;
+
+// Substrate Imports
+use sc_client_api::ExecutorProvider;
+pub use sc_executor::NativeExecutor;
+use sc_executor::native_executor_instance;
+use sc_network::NetworkService;
+use sc_service::{BasePath, Configuration, PartialComponents, Role, TaskManager};
+use sc_telemetry::{Telemetry, TelemetryHandle, TelemetryWorker, TelemetryWorkerHandle};
+use sp_consensus::SlotData;
+use sp_keystore::SyncCryptoStorePtr;
+use sp_runtime::traits::BlakeTwo256;
+use substrate_prometheus_endpoint::Registry;
+
+// Frontier Imports
+use fc_rpc_core::types::FilterPool;
+use fc_rpc_core::types::PendingTransactions;
+
+// Runtime type overrides
+type BlockNumber = u32;
+type Header = sp_runtime::generic::Header<BlockNumber, sp_runtime::traits::BlakeTwo256>;
+pub type Block = sp_runtime::generic::Block<Header, sp_runtime::OpaqueExtrinsic>;
+type Hash = sp_core::H256;
+
+// Native executor instance.
+native_executor_instance!(
+	pub ParachainRuntimeExecutor,
+	nft_runtime::api::dispatch,
+	nft_runtime::native_version,
+	frame_benchmarking::benchmarking::HostFunctions,
+);
+
+pub fn open_frontier_backend(config: &Configuration) -> Result<Arc<fc_db::Backend<Block>>, String> {
+	let config_dir = config.base_path.as_ref()
+		.map(|base_path| base_path.config_dir(config.chain_spec.id()))
+		.unwrap_or_else(|| {
+			BasePath::from_project("", "", "nft")
+				.config_dir(config.chain_spec.id())
+		});
+	let database_dir = config_dir.join("frontier").join("db");
+
+	Ok(Arc::new(fc_db::Backend::<Block>::new(&fc_db::DatabaseSettings {
+		source: fc_db::DatabaseSettingsSrc::RocksDb {
+			path: database_dir,
+			cache_size: 0,
+		}
+	})?))
+}
+
+type Executor = ParachainRuntimeExecutor;
+
+type FullClient = sc_service::TFullClient<Block, RuntimeApi, Executor>;
+type FullBackend = sc_service::TFullBackend<Block>;
+type FullSelectChain = sc_consensus::LongestChain<FullBackend, Block>;
+
+/// Starts a `ServiceBuilder` for a full service.
+///
+/// Use this macro if you don't actually need the full service, but just the builder in order to
+/// be able to perform chain operations.
+pub fn new_partial<BIQ>(
+	config: &Configuration,
+	build_import_queue: BIQ,
+) -> Result<
+	PartialComponents<
+		FullClient,
+		FullBackend,
+		FullSelectChain,
+		sp_consensus::DefaultImportQueue<Block, FullClient>,
+		sc_transaction_pool::FullPool<Block, FullClient>,
+		(Option<Telemetry>, PendingTransactions, Option<FilterPool>, Arc<fc_db::Backend<Block>>, Option<TelemetryWorkerHandle>),
+	>,
+	sc_service::Error,
+>
+where
+	sc_client_api::StateBackendFor<FullBackend, Block>: sp_api::StateBackend<BlakeTwo256>,
+	Executor: sc_executor::NativeExecutionDispatch + 'static,
+	BIQ: FnOnce(
+		Arc<FullClient>,
+		&Configuration,
+		Option<TelemetryHandle>,
+		&TaskManager,
+	) -> Result<
+		sp_consensus::DefaultImportQueue<Block, FullClient>,
+		sc_service::Error,
+	>,
+{
+	let telemetry = config
+		.telemetry_endpoints
+		.clone()
+		.filter(|x| !x.is_empty())
+		.map(|endpoints| -> Result<_, sc_telemetry::Error> {
+			let worker = TelemetryWorker::new(16)?;
+			let telemetry = worker.handle().new_telemetry(endpoints);
+			Ok((worker, telemetry))
+		})
+		.transpose()?;
+
+	let telemetry = config.telemetry_endpoints.clone()
+		.filter(|x| !x.is_empty())
+		.map(|endpoints| -> Result<_, sc_telemetry::Error> {
+			let worker = TelemetryWorker::new(16)?;
+			let telemetry = worker.handle().new_telemetry(endpoints);
+			Ok((worker, telemetry))
+		})
+		.transpose()?;
+
+	let (client, backend, keystore_container, task_manager) =
+		sc_service::new_full_parts::<Block, RuntimeApi, Executor>(
+			&config,
+			telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()),
+		)?;
+	let client = Arc::new(client);
+
+	let telemetry_worker_handle = telemetry.as_ref().map(|(worker, _)| worker.handle());
+
+	let telemetry = telemetry.map(|(worker, telemetry)| {
+		task_manager.spawn_handle().spawn("telemetry", worker.run());
+		telemetry
+	});
+
+	let select_chain = sc_consensus::LongestChain::new(backend.clone());
+
+	let transaction_pool = sc_transaction_pool::BasicPool::new_full(
+		config.transaction_pool.clone(),
+		config.role.is_authority().into(),
+		config.prometheus_registry(),
+		task_manager.spawn_handle(),
+		client.clone(),
+	);
+
+	let pending_transactions: PendingTransactions = Some(Arc::new(Mutex::new(HashMap::new())));
+
+	let filter_pool: Option<FilterPool>
+		= Some(Arc::new(Mutex::new(BTreeMap::new())));
+
+	let frontier_backend = open_frontier_backend(config)?;
+
+	let import_queue = build_import_queue(
+		client.clone(),
+		config,
+		telemetry.as_ref().map(|telemetry| telemetry.handle()),
+		&task_manager,
+	)?;
+
+	let params = PartialComponents {
+		backend,
+		client,
+		import_queue,
+		keystore_container,
+		task_manager,
+		transaction_pool,
+		select_chain,
+		other: (telemetry, pending_transactions, filter_pool, frontier_backend, telemetry_worker_handle),
+	};
+
+	Ok(params)
+}
+
+/// Start a node with the given parachain `Configuration` and relay chain `Configuration`.
+///
+/// This is the actual implementation that is abstract over the executor and the runtime api.
+#[sc_tracing::logging::prefix_logs_with("Parachain")]
+async fn start_node_impl<BIQ, BIC>(
+	parachain_config: Configuration,
+	collator_key: CollatorPair,
+	polkadot_config: Configuration,
+	id: ParaId,
+	build_import_queue: BIQ,
+	build_consensus: BIC,
+) -> sc_service::error::Result<(TaskManager, Arc<FullClient>)>
+where
+	sc_client_api::StateBackendFor<FullBackend, Block>: sp_api::StateBackend<BlakeTwo256>,
+	Executor: sc_executor::NativeExecutionDispatch + 'static,
+	BIQ: FnOnce(
+		Arc<FullClient>,
+		&Configuration,
+		Option<TelemetryHandle>,
+		&TaskManager,
+	) -> Result<
+		sp_consensus::DefaultImportQueue<Block, FullClient>,
+		sc_service::Error,
+	>,
+	BIC: FnOnce(
+		Arc<FullClient>,
+		Option<&Registry>,
+		Option<TelemetryHandle>,
+		&TaskManager,
+		&polkadot_service::NewFull<polkadot_service::Client>,
+		Arc<sc_transaction_pool::FullPool<Block, FullClient>>,
+		Arc<NetworkService<Block, Hash>>,
+		SyncCryptoStorePtr,
+		bool,
+	) -> Result<Box<dyn ParachainConsensus<Block>>, sc_service::Error>,
+{
+	if matches!(parachain_config.role, Role::Light) {
+		return Err("Light client not supported!".into());
+	}
+
+	let parachain_config = prepare_node_config(parachain_config);
+
+	let params = new_partial::<BIQ>(&parachain_config, build_import_queue)?;
+	let (mut telemetry, pending_transactions, filter_pool, frontier_backend, telemetry_worker_handle) = params.other;
+
+	let relay_chain_full_node = cumulus_client_service::build_polkadot_full_node(
+		polkadot_config,
+		collator_key.clone(),
+		telemetry_worker_handle,
+	)
+	.map_err(|e| match e {
+		polkadot_service::Error::Sub(x) => x,
+		s => format!("{}", s).into(),
+	})?;
+
+	let client = params.client.clone();
+	let backend = params.backend.clone();
+	let block_announce_validator = build_block_announce_validator(
+		relay_chain_full_node.client.clone(),
+		id,
+		Box::new(relay_chain_full_node.network.clone()),
+		relay_chain_full_node.backend.clone(),
+	);
+
+	let force_authoring = parachain_config.force_authoring;
+	let validator = parachain_config.role.is_authority();
+	let prometheus_registry = parachain_config.prometheus_registry().cloned();
+	let transaction_pool = params.transaction_pool.clone();
+	let mut task_manager = params.task_manager;
+	let import_queue = cumulus_client_service::SharedImportQueue::new(params.import_queue);
+	let (network, network_status_sinks, system_rpc_tx, start_network) =
+		sc_service::build_network(sc_service::BuildNetworkParams {
+			config: &parachain_config,
+			client: client.clone(),
+			transaction_pool: transaction_pool.clone(),
+			spawn_handle: task_manager.spawn_handle(),
+			import_queue: import_queue.clone(),
+			on_demand: None,
+			block_announce_validator_builder: Some(Box::new(|_| block_announce_validator)),
+		})?;
+
+	let subscription_executor = sc_rpc::SubscriptionTaskExecutor::new(task_manager.spawn_handle());
+	let rpc_client = client.clone();
+	let rpc_pool = transaction_pool.clone();
+	let select_chain = params.select_chain.clone();
+	let is_authority = parachain_config.role.clone().is_authority();
+	let rpc_network = network.clone();
+	let rpc_extensions_builder = Box::new(move |deny_unsafe, _| {
+		let full_deps = nft_rpc::FullDeps {
+			backend: frontier_backend.clone(),
+			deny_unsafe,
+			client: rpc_client.clone(),
+			pool: rpc_pool.clone(),
+			// TODO: Unhardcode
+			enable_dev_signer: false,
+			filter_pool: filter_pool.clone(),
+			network: rpc_network.clone(),
+			pending_transactions: pending_transactions.clone(),
+			select_chain: select_chain.clone(),
+			is_authority: is_authority.clone(),
+			// TODO: Unhardcode
+			max_past_logs: 10000,
+		};
+
+		nft_rpc::create_full::<_, _, _, RuntimeApi, _>(full_deps, subscription_executor.clone())
+	});
+
+	sc_service::spawn_tasks(sc_service::SpawnTasksParams {
+		on_demand: None,
+		remote_blockchain: None,
+		rpc_extensions_builder,
+		client: client.clone(),
+		transaction_pool: transaction_pool.clone(),
+		task_manager: &mut task_manager,
+		config: parachain_config,
+		keystore: params.keystore_container.sync_keystore(),
+		backend: backend.clone(),
+		network: network.clone(),
+		network_status_sinks,
+		system_rpc_tx,
+		telemetry: telemetry.as_mut(),
+	})?;
+
+	let announce_block = {
+		let network = network.clone();
+		Arc::new(move |hash, data| network.announce_block(hash, data))
+	};
+
+	if validator {
+		let parachain_consensus = build_consensus(
+			client.clone(),
+			prometheus_registry.as_ref(),
+			telemetry.as_ref().map(|t| t.handle()),
+			&task_manager,
+			&relay_chain_full_node,
+			transaction_pool,
+			network,
+			params.keystore_container.sync_keystore(),
+			force_authoring,
+		)?;
+
+		let spawner = task_manager.spawn_handle();
+
+		let params = StartCollatorParams {
+			para_id: id,
+			block_status: client.clone(),
+			announce_block,
+			client: client.clone(),
+			task_manager: &mut task_manager,
+			collator_key,
+			relay_chain_full_node,
+			spawner,
+			parachain_consensus,
+			import_queue,
+		};
+
+		start_collator(params).await?;
+	} else {
+		let params = StartFullNodeParams {
+			client: client.clone(),
+			announce_block,
+			task_manager: &mut task_manager,
+			para_id: id,
+			relay_chain_full_node,
+		};
+
+		start_full_node(params)?;
+	}
+
+	start_network.start_network();
+
+	Ok((task_manager, client))
+}
+
+/// Build the import queue for the the parachain runtime.
+pub fn parachain_build_import_queue(
+	client: Arc<FullClient>,
+	config: &Configuration,
+	telemetry: Option<TelemetryHandle>,
+	task_manager: &TaskManager,
+) -> Result<
+	sp_consensus::DefaultImportQueue<
+		Block,
+		FullClient,
+	>,
+	sc_service::Error,
+> {
+	let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?;
+
+
+	cumulus_client_consensus_aura::import_queue::<
+		sp_consensus_aura::sr25519::AuthorityPair,
+		_,
+		_,
+		_,
+		_,
+		_,
+		_,
+	>(cumulus_client_consensus_aura::ImportQueueParams {
+		block_import:  client.clone(),
+		client: client.clone(),
+		create_inherent_data_providers: move |_, _| async move {
+			let time = sp_timestamp::InherentDataProvider::from_system_time();
+
+			let slot =
+				sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_duration(
+					*time,
+					slot_duration.slot_duration(),
+				);
+
+			Ok((time, slot))
+		},
+		registry: config.prometheus_registry().clone(),
+		can_author_with: sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()),
+		spawner: &task_manager.spawn_essential_handle(),
+		telemetry,
+	})
+	.map_err(Into::into)
+}
+
+/// Start a normal parachain node.
+pub async fn start_node(
+	parachain_config: Configuration,
+	collator_key: CollatorPair,
+	polkadot_config: Configuration,
+	id: ParaId,
+) -> sc_service::error::Result<(TaskManager, Arc<FullClient>)> {
+	start_node_impl::<_, _>(
+		parachain_config,
+		collator_key,
+		polkadot_config,
+		id,
+		parachain_build_import_queue,
+		|client,
+		 prometheus_registry,
+		 telemetry,
+		 task_manager,
+		 relay_chain_node,
+		 transaction_pool,
+		 sync_oracle,
+		 keystore,
+		 force_authoring| {
+			let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?;
+
+			let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording(
+				task_manager.spawn_handle(),
+				client.clone(),
+				transaction_pool,
+				prometheus_registry.clone(),
+				telemetry.clone(),
+			);
+
+			let relay_chain_backend = relay_chain_node.backend.clone();
+			let relay_chain_client = relay_chain_node.client.clone();
+			Ok(build_aura_consensus::<
+				sp_consensus_aura::sr25519::AuthorityPair,
+				_,
+				_,
+				_,
+				_,
+				_,
+				_,
+				_,
+				_,
+				_,
+			>(BuildAuraConsensusParams {
+				proposer_factory,
+				create_inherent_data_providers: move |_, (relay_parent, validation_data)| {
+					let parachain_inherent =
+					cumulus_primitives_parachain_inherent::ParachainInherentData::create_at_with_client(
+						relay_parent,
+						&relay_chain_client,
+						&*relay_chain_backend,
+						&validation_data,
+						id,
+					);
+					async move {
+						let time = sp_timestamp::InherentDataProvider::from_system_time();
+
+						let slot =
+						sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_duration(
+							*time,
+							slot_duration.slot_duration(),
+						);
+
+						let parachain_inherent = parachain_inherent.ok_or_else(|| {
+							Box::<dyn std::error::Error + Send + Sync>::from(
+								"Failed to create parachain inherent",
+							)
+						})?;
+						Ok((time, slot, parachain_inherent))
+					}
+				},
+				block_import: client.clone(),
+				relay_chain_client: relay_chain_node.client.clone(),
+				relay_chain_backend: relay_chain_node.backend.clone(),
+				para_client: client.clone(),
+				backoff_authoring_blocks: Option::<()>::None,
+				sync_oracle,
+				keystore,
+				force_authoring,
+				slot_duration,
+				// We got around 500ms for proposing
+				block_proposal_slot_portion: SlotProportion::new(1f32 / 24f32),
+				telemetry,
+			}))
+		},
+	)
+	.await
+}
\ No newline at end of file
addednode/rpc/Cargo.tomldiffbeforeafterboth
--- /dev/null
+++ b/node/rpc/Cargo.toml
@@ -0,0 +1,56 @@
+[package]
+name = "nft-rpc"
+version = "3.3.1"
+authors = ['Unique Network <support@uniquenetwork.io>']
+license = 'All Rights Reserved'
+edition = "2018"
+description = "Unique chain rpc"
+
+[package.metadata.docs.rs]
+targets = ["x86_64-unknown-linux-gnu"]
+
+[dependencies]
+futures = { version = "0.3.1", features = ["compat"] }
+jsonrpc-core = "15.0.0"
+jsonrpc-pubsub = "15.0.0"
+pallet-contracts-rpc = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+pallet-transaction-payment-rpc = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+pallet-transaction-payment-rpc-runtime-api = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sc-client-api = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sc-consensus-aura = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sc-consensus-epochs = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sc-finality-grandpa = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sc-finality-grandpa-rpc = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sc-keystore = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sc-network = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sc-rpc-api = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sc-rpc = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sc-service = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sp-api = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sp-block-builder = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sp-blockchain = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sp-consensus = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sp-consensus-aura = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sp-core = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sp-offchain = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sp-runtime = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sp-storage = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sp-session = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sp-transaction-pool = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sc-transaction-pool = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+sc-transaction-graph = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+substrate-frame-rpc-system = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
+tokio = { version = "0.2.13", features = ["macros", "sync"] }
+
+pallet-ethereum = { git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+fc-rpc = { default-features = false, git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+fp-rpc = { default-features = false, git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+fc-rpc-core = { default-features = false, git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+fc-db = { default-features = false, git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+fc-mapping-sync = { default-features = false, git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+
+pallet-nft = { path = "../../pallets/nft" }
+nft-runtime = { path = "../../runtime" }
+
+[features]
+std = []
\ No newline at end of file
addednode/rpc/src/lib.rsdiffbeforeafterboth
--- /dev/null
+++ b/node/rpc/src/lib.rs
@@ -0,0 +1,256 @@
+use nft_runtime::{Hash, AccountId, Index, opaque::Block, BlockNumber, Balance};
+use fc_rpc::{OverrideHandle, RuntimeApiStorageOverride, SchemaV1Override, StorageOverride};
+use fc_rpc_core::types::{FilterPool, PendingTransactions};
+use jsonrpc_pubsub::manager::SubscriptionManager;
+use pallet_ethereum::EthereumStorageSchema;
+use sc_client_api::{
+	backend::{AuxStore, StorageProvider},
+	client::BlockchainEvents,
+};
+use pallet_nft::NftApi;
+use sc_finality_grandpa::{
+	FinalityProofProvider, GrandpaJustificationStream, SharedAuthoritySet, SharedVoterState,
+};
+use sc_network::NetworkService;
+use sc_rpc::SubscriptionTaskExecutor;
+pub use sc_rpc_api::DenyUnsafe;
+use sp_api::ProvideRuntimeApi;
+use sp_block_builder::BlockBuilder;
+use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata};
+use sp_consensus::SelectChain;
+use sp_transaction_pool::TransactionPool;
+use std::{collections::BTreeMap, marker::PhantomData, sync::Arc};
+
+/// Public io handler for exporting into other modules
+pub type IoHandler = jsonrpc_core::IoHandler<sc_rpc::Metadata>;
+
+/// Light client extra dependencies.
+pub struct LightDeps<C, F, P> {
+	/// The client instance to use.
+	pub client: Arc<C>,
+	/// Transaction pool instance.
+	pub pool: Arc<P>,
+	/// Remote access to the blockchain (async).
+	pub remote_blockchain: Arc<dyn sc_client_api::light::RemoteBlockchain<Block>>,
+	/// Fetcher instance.
+	pub fetcher: Arc<F>,
+}
+
+/// Extra dependencies for GRANDPA
+pub struct GrandpaDeps<B> {
+	/// Voting round info.
+	pub shared_voter_state: SharedVoterState,
+	/// Authority set info.
+	pub shared_authority_set: SharedAuthoritySet<Hash, BlockNumber>,
+	/// Receives notifications about justification events from Grandpa.
+	pub justification_stream: GrandpaJustificationStream<Block>,
+	/// Executor to drive the subscription manager in the Grandpa RPC handler.
+	pub subscription_executor: SubscriptionTaskExecutor,
+	/// Finality proof provider.
+	pub finality_provider: Arc<FinalityProofProvider<B, Block>>,
+}
+
+/// Full client dependencies.
+pub struct FullDeps<C, P, SC> {
+	/// The client instance to use.
+	pub client: Arc<C>,
+	/// Transaction pool instance.
+	pub pool: Arc<P>,
+	/// The SelectChain Strategy
+	pub select_chain: SC,
+	/// The Node authority flag
+	pub is_authority: bool,
+	/// Whether to enable dev signer
+	pub enable_dev_signer: bool,
+	/// Network service
+	pub network: Arc<NetworkService<Block, Hash>>,
+	/// Whether to deny unsafe calls
+	pub deny_unsafe: DenyUnsafe,
+	/// Ethereum pending transactions.
+	pub pending_transactions: PendingTransactions,
+	/// EthFilterApi pool.
+	pub filter_pool: Option<FilterPool>,
+	/// Backend.
+	pub backend: Arc<fc_db::Backend<Block>>,
+	/// Maximum number of logs in a query.
+	pub max_past_logs: u32,
+}
+
+struct AccountCodes<C, B> {
+	client: Arc<C>,
+	_marker: PhantomData<B>,
+}
+
+impl<C, Block> AccountCodes<C, Block>
+where
+	Block: sp_api::BlockT,
+	C: ProvideRuntimeApi<Block>,
+{
+	fn new(client: Arc<C>) -> Self {
+		Self {
+			client,
+			_marker: PhantomData,
+		}
+	}
+}
+
+impl<C, Block> fc_rpc::AccountCodeProvider<Block> for AccountCodes<C, Block>
+where
+	Block: sp_api::BlockT,
+	C: ProvideRuntimeApi<Block>,
+	C::Api: pallet_nft::NftApi<Block>,
+{
+	fn code(&self, block: &sp_api::BlockId<Block>, account: sp_core::H160) -> Option<Vec<u8>> {
+		self.client
+			.runtime_api()
+			.eth_contract_code(block, account)
+			.ok()
+			.flatten()
+	}
+}
+
+/// Instantiate all Full RPC extensions.
+pub fn create_full<C, P, SC, A, B>(
+	deps: FullDeps<C, P, SC>,
+	subscription_task_executor: SubscriptionTaskExecutor,
+) -> jsonrpc_core::IoHandler<sc_rpc_api::Metadata>
+where
+	C: ProvideRuntimeApi<Block> + StorageProvider<Block, B> + AuxStore,
+	C: HeaderBackend<Block> + HeaderMetadata<Block, Error = BlockChainError> + 'static,
+	C: Send + Sync + 'static,
+	C: BlockchainEvents<Block>,
+	C::Api: substrate_frame_rpc_system::AccountNonceApi<Block, AccountId, Index>,
+	C::Api: BlockBuilder<Block>,
+	C::Api: pallet_contracts_rpc::ContractsRuntimeApi<Block, AccountId, Balance, BlockNumber, Hash>,
+	C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi<Block, Balance>,
+	C::Api: fp_rpc::EthereumRuntimeRPCApi<Block>,
+	C::Api: pallet_nft::NftApi<Block>,
+	P: TransactionPool<Block = Block> + 'static,
+	SC: SelectChain<Block> + 'static,
+	B: sc_client_api::Backend<Block> + Send + Sync + 'static,
+	B::State: sc_client_api::backend::StateBackend<sp_runtime::traits::HashFor<Block>>,
+{
+	use fc_rpc::{
+		EthApi, EthApiServer, EthDevSigner, EthFilterApi, EthFilterApiServer, EthPubSubApi,
+		EthPubSubApiServer, EthSigner, HexEncodedIdProvider, NetApi, NetApiServer, Web3Api,
+		Web3ApiServer,
+	};
+	use pallet_contracts_rpc::{Contracts, ContractsApi};
+	use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApi};
+	use substrate_frame_rpc_system::{FullSystem, SystemApi};
+
+	let mut io = jsonrpc_core::IoHandler::default();
+	let FullDeps {
+		client,
+		pool,
+		select_chain: _,
+		enable_dev_signer,
+		is_authority,
+		network,
+		deny_unsafe,
+		pending_transactions,
+		filter_pool,
+		backend,
+		max_past_logs,
+	} = deps;
+
+	io.extend_with(SystemApi::to_delegate(FullSystem::new(
+		client.clone(),
+		pool.clone(),
+		deny_unsafe,
+	)));
+
+	io.extend_with(TransactionPaymentApi::to_delegate(TransactionPayment::new(
+		client.clone(),
+	)));
+
+	io.extend_with(ContractsApi::to_delegate(Contracts::new(client.clone())));
+
+	let mut signers = Vec::new();
+	if enable_dev_signer {
+		signers.push(Box::new(EthDevSigner::new()) as Box<dyn EthSigner>);
+	}
+	let mut overrides_map = BTreeMap::new();
+	overrides_map.insert(
+		EthereumStorageSchema::V1,
+		Box::new(SchemaV1Override::new_with_code_provider(
+			client.clone(),
+			Arc::new(AccountCodes::<C, Block>::new(client.clone())),
+		)) as Box<dyn StorageOverride<_> + Send + Sync>,
+	);
+
+	let overrides = Arc::new(OverrideHandle {
+		schemas: overrides_map,
+		fallback: Box::new(RuntimeApiStorageOverride::new(client.clone())),
+	});
+
+	io.extend_with(EthApiServer::to_delegate(EthApi::new(
+		client.clone(),
+		pool.clone(),
+		nft_runtime::TransactionConverter,
+		network.clone(),
+		pending_transactions.clone(),
+		signers,
+		overrides.clone(),
+		backend,
+		is_authority,
+		max_past_logs,
+	)));
+
+	if let Some(filter_pool) = filter_pool {
+		io.extend_with(EthFilterApiServer::to_delegate(EthFilterApi::new(
+			client.clone(),
+			filter_pool.clone(),
+			500 as usize, // max stored filters
+			overrides.clone(),
+			max_past_logs,
+		)));
+	}
+
+	io.extend_with(NetApiServer::to_delegate(NetApi::new(
+		client.clone(),
+		network.clone(),
+		// Whether to format the `peer_count` response as Hex (default) or not.
+		true,
+	)));
+
+	io.extend_with(Web3ApiServer::to_delegate(Web3Api::new(client.clone())));
+
+	io.extend_with(EthPubSubApiServer::to_delegate(EthPubSubApi::new(
+		pool.clone(),
+		client.clone(),
+		network.clone(),
+		SubscriptionManager::<HexEncodedIdProvider>::with_id_provider(
+			HexEncodedIdProvider::default(),
+			Arc::new(subscription_task_executor),
+		),
+		overrides,
+	)));
+
+	io
+}
+
+/// Instantiate all Light RPC extensions.
+pub fn create_light<C, P, M, F>(deps: LightDeps<C, F, P>) -> jsonrpc_core::IoHandler<M>
+where
+	C: sp_blockchain::HeaderBackend<Block>,
+	C: Send + Sync + 'static,
+	F: sc_client_api::light::Fetcher<Block> + 'static,
+	P: TransactionPool + 'static,
+	M: jsonrpc_core::Metadata + Default,
+{
+	use substrate_frame_rpc_system::{LightSystem, SystemApi};
+
+	let LightDeps {
+		client,
+		pool,
+		remote_blockchain,
+		fetcher,
+	} = deps;
+	let mut io = jsonrpc_core::IoHandler::default();
+	io.extend_with(SystemApi::<Hash, AccountId, Index>::to_delegate(
+		LightSystem::new(client, remote_blockchain, fetcher, pool),
+	));
+
+	io
+}
deletednode/src/chain_spec.rsdiffbeforeafterboth
--- a/node/src/chain_spec.rs
+++ /dev/null
@@ -1,219 +0,0 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
-
-use cumulus_primitives_core::ParaId;
-use nft_runtime::*;
-use nft_data_structs::*;
-use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};
-use sc_service::ChainType;
-use sp_core::{sr25519, Pair, Public};
-use sp_runtime::traits::{IdentifyAccount, Verify};
-
-use serde::{Deserialize, Serialize};
-use serde_json::map::Map;
-
-/// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type.
-pub type ChainSpec = sc_service::GenericChainSpec<nft_runtime::GenesisConfig, Extensions>;
-
-/// Helper function to generate a crypto pair from seed
-pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
-    TPublic::Pair::from_string(&format!("//{}", seed), None)
-        .expect("static values are valid; qed")
-        .public()
-}
-
-/// The extensions for the [`ChainSpec`].
-#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)]
-#[serde(deny_unknown_fields)]
-pub struct Extensions {
-	/// The relay chain of the Parachain.
-	pub relay_chain: String,
-	/// The id of the Parachain.
-	pub para_id: u32,
-}
-
-impl Extensions {
-	/// Try to get the extension from the given `ChainSpec`.
-	pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> {
-		sc_chain_spec::get_extension(chain_spec.extensions())
-	}
-}
-
-type AccountPublic = <Signature as Verify>::Signer;
-
-/// Helper function to generate an account ID from seed
-pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
-where
-    AccountPublic: From<<TPublic::Pair as Pair>::Public>,
-{
-    AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
-}
-
-pub fn development_config(id: ParaId) -> ChainSpec {
-	let mut properties = Map::new();
-	properties.insert("tokenSymbol".into(), "testUNQ".into());
-	properties.insert("tokenDecimals".into(), 15.into());
-	properties.insert("ss58Format".into(), 42.into()); // Generic Substrate wildcard (SS58 checksum preimage)
-
-	ChainSpec::from_genesis(
-		// Name
-		"Development",
-		// ID
-		"dev",
-		ChainType::Local,
-		move || testnet_genesis(
-			// Sudo account
-			get_account_id_from_seed::<sr25519::Public>("Alice"),
-			vec![
-				get_from_seed::<AuraId>("Alice"),
-				get_from_seed::<AuraId>("Bob"),
-			],
-			// Pre-funded accounts
-			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-			],
-			id,
-		),
-		// Bootnodes
-		vec![],
-		// Telemetry
-		None,
-		// Protocol ID
-		None,
-		// Properties
-		Some(properties),
-		// Extensions
-		Extensions {
-			relay_chain: "rococo-dev".into(),
-			para_id: id.into(),
-		},
-	)
-}
-
-pub fn local_testnet_config(id: ParaId) -> ChainSpec {
-	ChainSpec::from_genesis(
-		// Name
-		"Local Testnet",
-		// ID
-		"local_testnet",
-		ChainType::Local,
-		move || testnet_genesis(
-			// Sudo account
-			get_account_id_from_seed::<sr25519::Public>("Alice"),
-			vec![
-				get_from_seed::<AuraId>("Alice"),
-				get_from_seed::<AuraId>("Bob"),
-			],
-			// Pre-funded accounts
-			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie"),
-				get_account_id_from_seed::<sr25519::Public>("Dave"),
-				get_account_id_from_seed::<sr25519::Public>("Eve"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
-			],
-			id,
-		),
-		// Bootnodes
-		vec![],
-		// Telemetry
-		None,
-		// Protocol ID
-		None,
-		// Properties
-		None,
-		// Extensions
-		Extensions {
-			relay_chain: "rococo-local".into(),
-			para_id: id.into(),
-		},
-	)
-}
-
-fn testnet_genesis(
-    root_key: AccountId,
-	initial_authorities: Vec<AuraId>,
-    endowed_accounts: Vec<AccountId>,
-	id: ParaId,
-) -> GenesisConfig {
-
-	let vested_accounts = vec![
-		get_account_id_from_seed::<sr25519::Public>("Bob"),
-	];
-
-    GenesisConfig {
-		system: nft_runtime::SystemConfig {
-			code: nft_runtime::WASM_BINARY
-				.expect("WASM binary was not build, please build it!")
-				.to_vec(),
-			changes_trie_config: Default::default(),
-		},
-        pallet_balances: BalancesConfig {
-            balances: endowed_accounts
-                .iter()
-                .cloned()
-                .map(|k| (k, 1 << 70))
-                .collect(),
-        },
-		pallet_treasury: Default::default(),
-		pallet_sudo: SudoConfig { key: root_key },
-		pallet_vesting: VestingConfig {
-            vesting: vested_accounts
-                .iter()
-                .cloned()
-                .map(|k| (k, 1000, 100, 1 << 98))
-                .collect(),
-        },
-        pallet_nft: NftConfig {
-            collection_id: vec![(
-                1,
-                Collection {
-                    owner: get_account_id_from_seed::<sr25519::Public>("Alice"),
-                    mode: CollectionMode::NFT,
-                    access: AccessMode::Normal,
-                    decimal_points: 0,
-                    name: vec![],
-                    description: vec![],
-                    token_prefix: vec![],
-                    mint_mode: false,
-					offchain_schema: vec![],
-					schema_version: SchemaVersion::default(),
-                    sponsorship: SponsorshipState::Confirmed(get_account_id_from_seed::<sr25519::Public>("Alice")),
-                    const_on_chain_schema: vec![],
-					variable_on_chain_schema: vec![],
-					limits: CollectionLimits::default()
-                },
-            )],
-            nft_item_id: vec![],
-            fungible_item_id: vec![],
-            refungible_item_id: vec![],
-            chain_limit: ChainLimits {
-                collection_numbers_limit: 100000,
-                account_token_ownership_limit: 1000000,
-                collections_admins_limit: 5,
-                custom_data_limit: 2048,
-                nft_sponsor_transfer_timeout: 15,
-                fungible_sponsor_transfer_timeout: 15,
-				refungible_sponsor_transfer_timeout: 15,
-				offchain_schema_limit: 1024,
-				variable_on_chain_schema_limit: 1024,
-				const_on_chain_schema_limit: 1024,
-            },
-        },
-		parachain_info: nft_runtime::ParachainInfoConfig { parachain_id: id },
-		pallet_aura: nft_runtime::AuraConfig {
-			authorities: initial_authorities,
-		},
-		cumulus_pallet_aura_ext: Default::default(),
-    }
-}
deletednode/src/cli.rsdiffbeforeafterboth
--- a/node/src/cli.rs
+++ /dev/null
@@ -1,130 +0,0 @@
-use crate::chain_spec;
-use cumulus_client_cli;
-use sc_cli;
-use std::path::PathBuf;
-use structopt::StructOpt;
-
-/// Sub-commands supported by the collator.
-#[derive(Debug, StructOpt)]
-pub enum Subcommand {
-	/// Export the genesis state of the parachain.
-	#[structopt(name = "export-genesis-state")]
-	ExportGenesisState(ExportGenesisStateCommand),
-
-	/// Export the genesis wasm of the parachain.
-	#[structopt(name = "export-genesis-wasm")]
-	ExportGenesisWasm(ExportGenesisWasmCommand),
-
-	/// Build a chain specification.
-	BuildSpec(sc_cli::BuildSpecCmd),
-
-	/// Validate blocks.
-	CheckBlock(sc_cli::CheckBlockCmd),
-
-	/// Export blocks.
-	ExportBlocks(sc_cli::ExportBlocksCmd),
-
-	/// Export the state of a given block into a chain spec.
-	ExportState(sc_cli::ExportStateCmd),
-
-	/// Import blocks.
-	ImportBlocks(sc_cli::ImportBlocksCmd),
-
-	/// Remove the whole chain.
-	PurgeChain(cumulus_client_cli::PurgeChainCmd),
-
-	/// Revert the chain to a previous state.
-	Revert(sc_cli::RevertCmd),
-
-	/// The custom benchmark subcommmand benchmarking runtime pallets.
-	#[structopt(name = "benchmark", about = "Benchmark runtime pallets.")]
-	Benchmark(frame_benchmarking_cli::BenchmarkCmd),
-}
-
-/// Command for exporting the genesis state of the parachain
-#[derive(Debug, StructOpt)]
-pub struct ExportGenesisStateCommand {
-	/// Output file name or stdout if unspecified.
-	#[structopt(parse(from_os_str))]
-	pub output: Option<PathBuf>,
-
-	/// Id of the parachain this state is for.
-	///
-	/// Default: 100
-	#[structopt(long, conflicts_with = "chain")]
-	pub parachain_id: Option<u32>,
-
-	/// Write output in binary. Default is to write in hex.
-	#[structopt(short, long)]
-	pub raw: bool,
-
-	/// The name of the chain for that the genesis state should be exported.
-	#[structopt(long, conflicts_with = "parachain-id")]
-	pub chain: Option<String>,
-}
-
-/// Command for exporting the genesis wasm file.
-#[derive(Debug, StructOpt)]
-pub struct ExportGenesisWasmCommand {
-	/// Output file name or stdout if unspecified.
-	#[structopt(parse(from_os_str))]
-	pub output: Option<PathBuf>,
-
-	/// Write output in binary. Default is to write in hex.
-	#[structopt(short, long)]
-	pub raw: bool,
-
-	/// The name of the chain for that the genesis wasm file should be exported.
-	#[structopt(long)]
-	pub chain: Option<String>,
-}
-
-#[derive(Debug, StructOpt)]
-#[structopt(settings = &[
-	structopt::clap::AppSettings::GlobalVersion,
-	structopt::clap::AppSettings::ArgsNegateSubcommands,
-	structopt::clap::AppSettings::SubcommandsNegateReqs,
-])]
-pub struct Cli {
-	#[structopt(subcommand)]
-	pub subcommand: Option<Subcommand>,
-
-	#[structopt(flatten)]
-	pub run: cumulus_client_cli::RunCmd,
-
-	/// Relaychain arguments
-	#[structopt(raw = true)]
-	pub relaychain_args: Vec<String>,
-}
-
-#[derive(Debug)]
-pub struct RelayChainCli {
-	/// The actual relay chain cli object.
-	pub base: polkadot_cli::RunCmd,
-
-	/// Optional chain id that should be passed to the relay chain.
-	pub chain_id: Option<String>,
-
-	/// The base path that should be used by the relay chain.
-	pub base_path: Option<PathBuf>,
-}
-
-impl RelayChainCli {
-	/// Parse the relay chain CLI parameters using the para chain `Configuration`.
-	pub fn new<'a>(
-		para_config: &sc_service::Configuration,
-		relay_chain_args: impl Iterator<Item = &'a String>,
-	) -> Self {
-		let extension = chain_spec::Extensions::try_get(&*para_config.chain_spec);
-		let chain_id = extension.map(|e| e.relay_chain.clone());
-		let base_path = para_config
-			.base_path
-			.as_ref()
-			.map(|x| x.path().join("polkadot"));
-		Self {
-			base_path,
-			chain_id,
-			base: polkadot_cli::RunCmd::from_iter(relay_chain_args),
-		}
-	}
-}
deletednode/src/command.rsdiffbeforeafterboth
--- a/node/src/command.rs
+++ /dev/null
@@ -1,448 +0,0 @@
-// This file is part of Substrate.
-
-// Copyright (C) 2017-2021 Parity Technologies (UK) Ltd.
-// SPDX-License-Identifier: Apache-2.0
-
-// 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.
-
-use crate::{
-	chain_spec,
-	cli::{Cli, RelayChainCli, Subcommand},
-	service::{new_partial, ParachainRuntimeExecutor}
-};
-use codec::Encode;
-use cumulus_primitives_core::ParaId;
-use cumulus_client_service::genesis::generate_genesis_block;
-use log::info;
-use nft_runtime::{RuntimeApi, Block};
-use polkadot_parachain::primitives::AccountIdConversion;
-use sc_cli::{
-	ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams,
-	NetworkParams, Result, RuntimeVersion, SharedParams, SubstrateCli,
-};
-use sc_service::{
-	config::{BasePath, PrometheusConfig}
-};
-use sp_core::hexdisplay::HexDisplay;
-use sp_runtime::traits::Block as BlockT;
-use std::{io::Write, net::SocketAddr};
-
-fn load_spec(
-	id: &str,
-	para_id: ParaId,
-) -> std::result::Result<Box<dyn sc_service::ChainSpec>, String> {
-	Ok(match id {
-		"dev" => Box::new(chain_spec::development_config(para_id)),
-		"" | "local" => Box::new(chain_spec::local_testnet_config(para_id)),
-		path => Box::new(chain_spec::ChainSpec::from_json_file(
-			std::path::PathBuf::from(path),
-		)?),
-	})
-}
-
-impl SubstrateCli for Cli {
-	fn impl_name() -> String {
-		"Parachain Collator Template".into()
-	}
-
-	fn impl_version() -> String {
-		env!("SUBSTRATE_CLI_IMPL_VERSION").into()
-	}
-
-	fn description() -> String {
-		format!(
-			"Parachain Collator Template\n\nThe command-line arguments provided first will be \
-		passed to the parachain node, while the arguments provided after -- will be passed \
-		to the relaychain node.\n\n\
-		{} [parachain-args] -- [relaychain-args]",
-			Self::executable_name()
-		)
-	}
-
-	fn author() -> String {
-		env!("CARGO_PKG_AUTHORS").into()
-	}
-
-	fn support_url() -> String {
-		"https://github.com/substrate-developer-hub/substrate-parachain-template/issues/new".into()
-	}
-
-	fn copyright_start_year() -> i32 {
-		2017
-	}
-
-	fn load_spec(&self, id: &str) -> std::result::Result<Box<dyn sc_service::ChainSpec>, String> {
-		load_spec(id, self.run.parachain_id.unwrap_or(200).into())
-	}
-
-	fn native_runtime_version(_: &Box<dyn ChainSpec>) -> &'static RuntimeVersion {
-		&nft_runtime::VERSION
-	}
-}
-
-impl SubstrateCli for RelayChainCli {
-	fn impl_name() -> String {
-		"Parachain Collator Template".into()
-	}
-
-	fn impl_version() -> String {
-		env!("SUBSTRATE_CLI_IMPL_VERSION").into()
-	}
-
-	fn description() -> String {
-		"Parachain Collator Template\n\nThe command-line arguments provided first will be \
-		passed to the parachain node, while the arguments provided after -- will be passed \
-		to the relaychain node.\n\n\
-		parachain-collator [parachain-args] -- [relaychain-args]"
-			.into()
-	}
-
-	fn author() -> String {
-		env!("CARGO_PKG_AUTHORS").into()
-	}
-
-	fn support_url() -> String {
-		"https://github.com/substrate-developer-hub/substrate-parachain-template/issues/new".into()
-	}
-
-	fn copyright_start_year() -> i32 {
-		2017
-	}
-
-	fn load_spec(&self, id: &str) -> std::result::Result<Box<dyn sc_service::ChainSpec>, String> {
-		polkadot_cli::Cli::from_iter([RelayChainCli::executable_name().to_string()].iter())
-			.load_spec(id)
-	}
-
-	fn native_runtime_version(chain_spec: &Box<dyn ChainSpec>) -> &'static RuntimeVersion {
-		polkadot_cli::Cli::native_runtime_version(chain_spec)
-	}
-}
-
-fn extract_genesis_wasm(chain_spec: &Box<dyn sc_service::ChainSpec>) -> Result<Vec<u8>> {
-	let mut storage = chain_spec.build_storage()?;
-
-	storage
-		.top
-		.remove(sp_core::storage::well_known_keys::CODE)
-		.ok_or_else(|| "Could not find wasm file in genesis state!".into())
-}
-
-macro_rules! construct_async_run {
-	(|$components:ident, $cli:ident, $cmd:ident, $config:ident| $( $code:tt )* ) => {{
-		let runner = $cli.create_runner($cmd)?;
-		runner.async_run(|$config| {
-			let $components = new_partial::<
-				RuntimeApi,
-				ParachainRuntimeExecutor,
-				_
-			>(
-				&$config,
-				crate::service::parachain_build_import_queue,
-			)?;
-			let task_manager = $components.task_manager;
-			{ $( $code )* }.map(|v| (v, task_manager))
-		})
-	}}
-}
-
-/// Parse command line arguments into service configuration.
-pub fn run() -> Result<()> {
-	let cli = Cli::from_args();
-
-	match &cli.subcommand {
-		Some(Subcommand::BuildSpec(cmd)) => {
-			let runner = cli.create_runner(cmd)?;
-			runner.sync_run(|config| cmd.run(config.chain_spec, config.network))
-		}
-		Some(Subcommand::CheckBlock(cmd)) => {
-			construct_async_run!(|components, cli, cmd, config| {
-				Ok(cmd.run(components.client, components.import_queue))
-			})
-		}
-		Some(Subcommand::ExportBlocks(cmd)) => {
-			construct_async_run!(|components, cli, cmd, config| {
-				Ok(cmd.run(components.client, config.database))
-			})
-		}
-		Some(Subcommand::ExportState(cmd)) => {
-			construct_async_run!(|components, cli, cmd, config| {
-				Ok(cmd.run(components.client, config.chain_spec))
-			})
-		}
-		Some(Subcommand::ImportBlocks(cmd)) => {
-			construct_async_run!(|components, cli, cmd, config| {
-				Ok(cmd.run(components.client, components.import_queue))
-			})
-		}
-		Some(Subcommand::PurgeChain(cmd)) => {
-			let runner = cli.create_runner(cmd)?;
-
-			runner.sync_run(|config| {
-				let polkadot_cli = RelayChainCli::new(
-					&config,
-					[RelayChainCli::executable_name().to_string()]
-						.iter()
-						.chain(cli.relaychain_args.iter()),
-				);
-
-				let polkadot_config = SubstrateCli::create_configuration(
-					&polkadot_cli,
-					&polkadot_cli,
-					config.task_executor.clone(),
-				)
-				.map_err(|err| format!("Relay chain argument error: {}", err))?;
-
-				cmd.run(config, polkadot_config)
-			})
-		}
-		Some(Subcommand::Revert(cmd)) => construct_async_run!(|components, cli, cmd, config| {
-			Ok(cmd.run(components.client, components.backend))
-		}),
-		Some(Subcommand::ExportGenesisState(params)) => {
-			let mut builder = sc_cli::LoggerBuilder::new("");
-			builder.with_profiling(sc_tracing::TracingReceiver::Log, "");
-			let _ = builder.init();
-
-			let block: Block = generate_genesis_block(&load_spec(
-				&params.chain.clone().unwrap_or_default(),
-				params.parachain_id.unwrap_or(200).into(),
-			)?)?;
-			let raw_header = block.header().encode();
-			let output_buf = if params.raw {
-				raw_header
-			} else {
-				format!("0x{:?}", HexDisplay::from(&block.header().encode())).into_bytes()
-			};
-
-			if let Some(output) = &params.output {
-				std::fs::write(output, output_buf)?;
-			} else {
-				std::io::stdout().write_all(&output_buf)?;
-			}
-
-			Ok(())
-		}
-		Some(Subcommand::ExportGenesisWasm(params)) => {
-			let mut builder = sc_cli::LoggerBuilder::new("");
-			builder.with_profiling(sc_tracing::TracingReceiver::Log, "");
-			let _ = builder.init();
-
-			let raw_wasm_blob =
-				extract_genesis_wasm(&cli.load_spec(&params.chain.clone().unwrap_or_default())?)?;
-			let output_buf = if params.raw {
-				raw_wasm_blob
-			} else {
-				format!("0x{:?}", HexDisplay::from(&raw_wasm_blob)).into_bytes()
-			};
-
-			if let Some(output) = &params.output {
-				std::fs::write(output, output_buf)?;
-			} else {
-				std::io::stdout().write_all(&output_buf)?;
-			}
-
-			Ok(())
-		},
-		Some(Subcommand::Benchmark(cmd)) => {
-			if cfg!(feature = "runtime-benchmarks") {
-				let runner = cli.create_runner(cmd)?;
-
-				runner.sync_run(|config| cmd.run::<Block, ParachainRuntimeExecutor>(config))
-			} else {
-				Err("Benchmarking wasn't enabled when building the node. \
-				You can enable it with `--features runtime-benchmarks`.".into())
-			}
-		},
-		None => {
-			let runner = cli.create_runner(&cli.run.normalize())?;
-
-			runner.run_node_until_exit(|config| async move {
-				// TODO
-				let key = sp_core::Pair::generate().0;
-
-				let para_id =
-					chain_spec::Extensions::try_get(&*config.chain_spec).map(|e| e.para_id);
-
-				let polkadot_cli = RelayChainCli::new(
-					&config,
-					[RelayChainCli::executable_name().to_string()]
-						.iter()
-						.chain(cli.relaychain_args.iter()),
-				);
-
-				let id = ParaId::from(cli.run.parachain_id.or(para_id).unwrap_or(200));
-
-				let parachain_account =
-					AccountIdConversion::<polkadot_primitives::v0::AccountId>::into_account(&id);
-
-				let block: Block =
-					generate_genesis_block(&config.chain_spec).map_err(|e| format!("{:?}", e))?;
-				let genesis_state = format!("0x{:?}", HexDisplay::from(&block.header().encode()));
-
-				let task_executor = config.task_executor.clone();
-				let polkadot_config = SubstrateCli::create_configuration(
-					&polkadot_cli,
-					&polkadot_cli,
-					task_executor,
-				)
-				.map_err(|err| format!("Relay chain argument error: {}", err))?;
-
-				info!("Parachain id: {:?}", id);
-				info!("Parachain Account: {}", parachain_account);
-				info!("Parachain genesis state: {}", genesis_state);
-				info!(
-					"Is collating: {}",
-					if config.role.is_authority() {
-						"yes"
-					} else {
-						"no"
-					}
-				);
-
-				crate::service::start_node(config, key, polkadot_config, id)
-					.await
-					.map(|r| r.0)
-					.map_err(Into::into)
-			})
-		}
-	}
-}
-
-impl DefaultConfigurationValues for RelayChainCli {
-	fn p2p_listen_port() -> u16 {
-		30334
-	}
-
-	fn rpc_ws_listen_port() -> u16 {
-		9945
-	}
-
-	fn rpc_http_listen_port() -> u16 {
-		9934
-	}
-
-	fn prometheus_listen_port() -> u16 {
-		9616
-	}
-}
-
-impl CliConfiguration<Self> for RelayChainCli {
-	fn shared_params(&self) -> &SharedParams {
-		self.base.base.shared_params()
-	}
-
-	fn import_params(&self) -> Option<&ImportParams> {
-		self.base.base.import_params()
-	}
-
-	fn network_params(&self) -> Option<&NetworkParams> {
-		self.base.base.network_params()
-	}
-
-	fn keystore_params(&self) -> Option<&KeystoreParams> {
-		self.base.base.keystore_params()
-	}
-
-	fn base_path(&self) -> Result<Option<BasePath>> {
-		Ok(self
-			.shared_params()
-			.base_path()
-			.or_else(|| self.base_path.clone().map(Into::into)))
-	}
-
-	fn rpc_http(&self, default_listen_port: u16) -> Result<Option<SocketAddr>> {
-		self.base.base.rpc_http(default_listen_port)
-	}
-
-	fn rpc_ipc(&self) -> Result<Option<String>> {
-		self.base.base.rpc_ipc()
-	}
-
-	fn rpc_ws(&self, default_listen_port: u16) -> Result<Option<SocketAddr>> {
-		self.base.base.rpc_ws(default_listen_port)
-	}
-
-	fn prometheus_config(&self, default_listen_port: u16) -> Result<Option<PrometheusConfig>> {
-		self.base.base.prometheus_config(default_listen_port)
-	}
-
-	fn init<C: SubstrateCli>(&self) -> Result<()> {
-		unreachable!("PolkadotCli is never initialized; qed");
-	}
-
-	fn chain_id(&self, is_dev: bool) -> Result<String> {
-		let chain_id = self.base.base.chain_id(is_dev)?;
-
-		Ok(if chain_id.is_empty() {
-			self.chain_id.clone().unwrap_or_default()
-		} else {
-			chain_id
-		})
-	}
-
-	fn role(&self, is_dev: bool) -> Result<sc_service::Role> {
-		self.base.base.role(is_dev)
-	}
-
-	fn transaction_pool(&self) -> Result<sc_service::config::TransactionPoolOptions> {
-		self.base.base.transaction_pool()
-	}
-
-	fn state_cache_child_ratio(&self) -> Result<Option<usize>> {
-		self.base.base.state_cache_child_ratio()
-	}
-
-	fn rpc_methods(&self) -> Result<sc_service::config::RpcMethods> {
-		self.base.base.rpc_methods()
-	}
-
-	fn rpc_ws_max_connections(&self) -> Result<Option<usize>> {
-		self.base.base.rpc_ws_max_connections()
-	}
-
-	fn rpc_cors(&self, is_dev: bool) -> Result<Option<Vec<String>>> {
-		self.base.base.rpc_cors(is_dev)
-	}
-
-	fn telemetry_external_transport(&self) -> Result<Option<sc_service::config::ExtTransport>> {
-		self.base.base.telemetry_external_transport()
-	}
-
-	fn default_heap_pages(&self) -> Result<Option<u64>> {
-		self.base.base.default_heap_pages()
-	}
-
-	fn force_authoring(&self) -> Result<bool> {
-		self.base.base.force_authoring()
-	}
-
-	fn disable_grandpa(&self) -> Result<bool> {
-		self.base.base.disable_grandpa()
-	}
-
-	fn max_runtime_instances(&self) -> Result<Option<usize>> {
-		self.base.base.max_runtime_instances()
-	}
-
-	fn announce_block(&self) -> Result<bool> {
-		self.base.base.announce_block()
-	}
-
-	fn telemetry_endpoints(
-		&self,
-		chain_spec: &Box<dyn ChainSpec>,
-	) -> Result<Option<sc_telemetry::TelemetryEndpoints>> {
-		self.base.base.telemetry_endpoints(chain_spec)
-	}
-}
\ No newline at end of file
deletednode/src/lib.rsdiffbeforeafterboth
--- a/node/src/lib.rs
+++ /dev/null
@@ -1,2 +0,0 @@
-pub mod chain_spec;
-pub mod service;
deletednode/src/main.rsdiffbeforeafterboth
--- a/node/src/main.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
-
-mod chain_spec;
-#[macro_use]
-mod service;
-mod cli;
-mod command;
-
-fn main() -> sc_cli::Result<()> {
-    command::run()
-}
deletednode/src/service.rsdiffbeforeafterboth
--- a/node/src/service.rs
+++ /dev/null
@@ -1,458 +0,0 @@
-//! Service and ServiceFactory implementation. Specialized wrapper over substrate service.
-
-//
-// This file is subject to the terms and conditions defined in
-// file 'LICENSE', which is part of this source code package.
-//
-
-// std
-use std::sync::Arc;
-
-// Local Runtime Types
-use nft_runtime::RuntimeApi;
-
-// Cumulus Imports
-use cumulus_client_consensus_aura::{
-	build_aura_consensus, BuildAuraConsensusParams, SlotProportion,
-};
-use cumulus_client_consensus_common::ParachainConsensus;
-use cumulus_client_network::build_block_announce_validator;
-use cumulus_client_service::{
-	prepare_node_config, start_collator, start_full_node, StartCollatorParams, StartFullNodeParams,
-};
-use cumulus_primitives_core::ParaId;
-
-// Polkadot Imports
-use polkadot_primitives::v1::CollatorPair;
-
-// Substrate Imports
-use sc_client_api::ExecutorProvider;
-pub use sc_executor::NativeExecutor;
-use sc_executor::native_executor_instance;
-use sc_network::NetworkService;
-use sc_service::{Configuration, PartialComponents, Role, TFullBackend, TFullClient, TaskManager};
-use sc_telemetry::{Telemetry, TelemetryHandle, TelemetryWorker, TelemetryWorkerHandle};
-use sp_api::ConstructRuntimeApi;
-use sp_consensus::SlotData;
-use sp_keystore::SyncCryptoStorePtr;
-use sp_runtime::traits::BlakeTwo256;
-use substrate_prometheus_endpoint::Registry;
-
-// Runtime type overrides
-type BlockNumber = u32;
-type Header = sp_runtime::generic::Header<BlockNumber, sp_runtime::traits::BlakeTwo256>;
-pub type Block = sp_runtime::generic::Block<Header, sp_runtime::OpaqueExtrinsic>;
-type Hash = sp_core::H256;
-
-// Native executor instance.
-native_executor_instance!(
-	pub ParachainRuntimeExecutor,
-	nft_runtime::api::dispatch,
-	nft_runtime::native_version,
-	frame_benchmarking::benchmarking::HostFunctions,
-);
-
-/// Starts a `ServiceBuilder` for a full service.
-///
-/// Use this macro if you don't actually need the full service, but just the builder in order to
-/// be able to perform chain operations.
-pub fn new_partial<RuntimeApi, Executor, BIQ>(
-	config: &Configuration,
-	build_import_queue: BIQ,
-) -> Result<
-	PartialComponents<
-		TFullClient<Block, RuntimeApi, Executor>,
-		TFullBackend<Block>,
-		(),
-		sp_consensus::DefaultImportQueue<Block, TFullClient<Block, RuntimeApi, Executor>>,
-		sc_transaction_pool::FullPool<Block, TFullClient<Block, RuntimeApi, Executor>>,
-		(Option<Telemetry>, Option<TelemetryWorkerHandle>),
-	>,
-	sc_service::Error,
->
-where
-	RuntimeApi: ConstructRuntimeApi<Block, TFullClient<Block, RuntimeApi, Executor>>
-		+ Send
-		+ Sync
-		+ 'static,
-	RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue<Block>
-		+ sp_api::Metadata<Block>
-		+ sp_session::SessionKeys<Block>
-		+ sp_api::ApiExt<
-			Block,
-			StateBackend = sc_client_api::StateBackendFor<TFullBackend<Block>, Block>,
-		> + sp_offchain::OffchainWorkerApi<Block>
-		+ sp_block_builder::BlockBuilder<Block>,
-	sc_client_api::StateBackendFor<TFullBackend<Block>, Block>: sp_api::StateBackend<BlakeTwo256>,
-	Executor: sc_executor::NativeExecutionDispatch + 'static,
-	BIQ: FnOnce(
-		Arc<TFullClient<Block, RuntimeApi, Executor>>,
-		&Configuration,
-		Option<TelemetryHandle>,
-		&TaskManager,
-	) -> Result<
-		sp_consensus::DefaultImportQueue<Block, TFullClient<Block, RuntimeApi, Executor>>,
-		sc_service::Error,
-	>,
-{
-	let telemetry = config
-		.telemetry_endpoints
-		.clone()
-		.filter(|x| !x.is_empty())
-		.map(|endpoints| -> Result<_, sc_telemetry::Error> {
-			let worker = TelemetryWorker::new(16)?;
-			let telemetry = worker.handle().new_telemetry(endpoints);
-			Ok((worker, telemetry))
-		})
-		.transpose()?;
-
-	let (client, backend, keystore_container, task_manager) =
-		sc_service::new_full_parts::<Block, RuntimeApi, Executor>(
-			&config,
-			telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()),
-		)?;
-	let client = Arc::new(client);
-
-	let telemetry_worker_handle = telemetry.as_ref().map(|(worker, _)| worker.handle());
-
-	let telemetry = telemetry.map(|(worker, telemetry)| {
-		task_manager.spawn_handle().spawn("telemetry", worker.run());
-		telemetry
-	});
-
-	let transaction_pool = sc_transaction_pool::BasicPool::new_full(
-		config.transaction_pool.clone(),
-		config.role.is_authority().into(),
-		config.prometheus_registry(),
-		task_manager.spawn_handle(),
-		client.clone(),
-	);
-
-	let import_queue = build_import_queue(
-		client.clone(),
-		config,
-		telemetry.as_ref().map(|telemetry| telemetry.handle()),
-		&task_manager,
-	)?;
-
-	let params = PartialComponents {
-		backend,
-		client,
-		import_queue,
-		keystore_container,
-		task_manager,
-		transaction_pool,
-		select_chain: (),
-		other: (telemetry, telemetry_worker_handle),
-	};
-
-	Ok(params)
-}
-
-/// Start a node with the given parachain `Configuration` and relay chain `Configuration`.
-///
-/// This is the actual implementation that is abstract over the executor and the runtime api.
-#[sc_tracing::logging::prefix_logs_with("Parachain")]
-async fn start_node_impl<RuntimeApi, Executor, RB, BIQ, BIC>(
-	parachain_config: Configuration,
-	collator_key: CollatorPair,
-	polkadot_config: Configuration,
-	id: ParaId,
-	rpc_ext_builder: RB,
-	build_import_queue: BIQ,
-	build_consensus: BIC,
-) -> sc_service::error::Result<(TaskManager, Arc<TFullClient<Block, RuntimeApi, Executor>>)>
-where
-	RuntimeApi: ConstructRuntimeApi<Block, TFullClient<Block, RuntimeApi, Executor>>
-		+ Send
-		+ Sync
-		+ 'static,
-	RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue<Block>
-		+ sp_api::Metadata<Block>
-		+ sp_session::SessionKeys<Block>
-		+ sp_api::ApiExt<
-			Block,
-			StateBackend = sc_client_api::StateBackendFor<TFullBackend<Block>, Block>,
-		> + sp_offchain::OffchainWorkerApi<Block>
-		+ sp_block_builder::BlockBuilder<Block>
-		+ cumulus_primitives_core::CollectCollationInfo<Block>,
-	sc_client_api::StateBackendFor<TFullBackend<Block>, Block>: sp_api::StateBackend<BlakeTwo256>,
-	Executor: sc_executor::NativeExecutionDispatch + 'static,
-	RB: Fn(
-			Arc<TFullClient<Block, RuntimeApi, Executor>>,
-		) -> jsonrpc_core::IoHandler<sc_rpc::Metadata>
-		+ Send
-		+ 'static,
-	BIQ: FnOnce(
-		Arc<TFullClient<Block, RuntimeApi, Executor>>,
-		&Configuration,
-		Option<TelemetryHandle>,
-		&TaskManager,
-	) -> Result<
-		sp_consensus::DefaultImportQueue<Block, TFullClient<Block, RuntimeApi, Executor>>,
-		sc_service::Error,
-	>,
-	BIC: FnOnce(
-		Arc<TFullClient<Block, RuntimeApi, Executor>>,
-		Option<&Registry>,
-		Option<TelemetryHandle>,
-		&TaskManager,
-		&polkadot_service::NewFull<polkadot_service::Client>,
-		Arc<sc_transaction_pool::FullPool<Block, TFullClient<Block, RuntimeApi, Executor>>>,
-		Arc<NetworkService<Block, Hash>>,
-		SyncCryptoStorePtr,
-		bool,
-	) -> Result<Box<dyn ParachainConsensus<Block>>, sc_service::Error>,
-{
-	if matches!(parachain_config.role, Role::Light) {
-		return Err("Light client not supported!".into());
-	}
-
-	let parachain_config = prepare_node_config(parachain_config);
-
-	let params = new_partial::<RuntimeApi, Executor, BIQ>(&parachain_config, build_import_queue)?;
-	let (mut telemetry, telemetry_worker_handle) = params.other;
-
-	let relay_chain_full_node = cumulus_client_service::build_polkadot_full_node(
-		polkadot_config,
-		collator_key.clone(),
-		telemetry_worker_handle,
-	)
-	.map_err(|e| match e {
-		polkadot_service::Error::Sub(x) => x,
-		s => format!("{}", s).into(),
-	})?;
-
-	let client = params.client.clone();
-	let backend = params.backend.clone();
-	let block_announce_validator = build_block_announce_validator(
-		relay_chain_full_node.client.clone(),
-		id,
-		Box::new(relay_chain_full_node.network.clone()),
-		relay_chain_full_node.backend.clone(),
-	);
-
-	let force_authoring = parachain_config.force_authoring;
-	let validator = parachain_config.role.is_authority();
-	let prometheus_registry = parachain_config.prometheus_registry().cloned();
-	let transaction_pool = params.transaction_pool.clone();
-	let mut task_manager = params.task_manager;
-	let import_queue = cumulus_client_service::SharedImportQueue::new(params.import_queue);
-	let (network, network_status_sinks, system_rpc_tx, start_network) =
-		sc_service::build_network(sc_service::BuildNetworkParams {
-			config: &parachain_config,
-			client: client.clone(),
-			transaction_pool: transaction_pool.clone(),
-			spawn_handle: task_manager.spawn_handle(),
-			import_queue: import_queue.clone(),
-			on_demand: None,
-			block_announce_validator_builder: Some(Box::new(|_| block_announce_validator)),
-		})?;
-
-	let rpc_client = client.clone();
-	let rpc_extensions_builder = Box::new(move |_, _| rpc_ext_builder(rpc_client.clone()));
-
-	sc_service::spawn_tasks(sc_service::SpawnTasksParams {
-		on_demand: None,
-		remote_blockchain: None,
-		rpc_extensions_builder,
-		client: client.clone(),
-		transaction_pool: transaction_pool.clone(),
-		task_manager: &mut task_manager,
-		config: parachain_config,
-		keystore: params.keystore_container.sync_keystore(),
-		backend: backend.clone(),
-		network: network.clone(),
-		network_status_sinks,
-		system_rpc_tx,
-		telemetry: telemetry.as_mut(),
-	})?;
-
-	let announce_block = {
-		let network = network.clone();
-		Arc::new(move |hash, data| network.announce_block(hash, data))
-	};
-
-	if validator {
-		let parachain_consensus = build_consensus(
-			client.clone(),
-			prometheus_registry.as_ref(),
-			telemetry.as_ref().map(|t| t.handle()),
-			&task_manager,
-			&relay_chain_full_node,
-			transaction_pool,
-			network,
-			params.keystore_container.sync_keystore(),
-			force_authoring,
-		)?;
-
-		let spawner = task_manager.spawn_handle();
-
-		let params = StartCollatorParams {
-			para_id: id,
-			block_status: client.clone(),
-			announce_block,
-			client: client.clone(),
-			task_manager: &mut task_manager,
-			collator_key,
-			relay_chain_full_node,
-			spawner,
-			parachain_consensus,
-			import_queue,
-		};
-
-		start_collator(params).await?;
-	} else {
-		let params = StartFullNodeParams {
-			client: client.clone(),
-			announce_block,
-			task_manager: &mut task_manager,
-			para_id: id,
-			relay_chain_full_node,
-		};
-
-		start_full_node(params)?;
-	}
-
-	start_network.start_network();
-
-	Ok((task_manager, client))
-}
-
-/// Build the import queue for the the parachain runtime.
-pub fn parachain_build_import_queue(
-	client: Arc<TFullClient<Block, RuntimeApi, ParachainRuntimeExecutor>>,
-	config: &Configuration,
-	telemetry: Option<TelemetryHandle>,
-	task_manager: &TaskManager,
-) -> Result<
-	sp_consensus::DefaultImportQueue<
-		Block,
-		TFullClient<Block, RuntimeApi, ParachainRuntimeExecutor>,
-	>,
-	sc_service::Error,
-> {
-	let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?;
-
-
-	cumulus_client_consensus_aura::import_queue::<
-		sp_consensus_aura::sr25519::AuthorityPair,
-		_,
-		_,
-		_,
-		_,
-		_,
-		_,
-	>(cumulus_client_consensus_aura::ImportQueueParams {
-		block_import:  client.clone(),
-		client: client.clone(),
-		create_inherent_data_providers: move |_, _| async move {
-			let time = sp_timestamp::InherentDataProvider::from_system_time();
-
-			let slot =
-				sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_duration(
-					*time,
-					slot_duration.slot_duration(),
-				);
-
-			Ok((time, slot))
-		},
-		registry: config.prometheus_registry().clone(),
-		can_author_with: sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()),
-		spawner: &task_manager.spawn_essential_handle(),
-		telemetry,
-	})
-	.map_err(Into::into)
-}
-
-/// Start a normal parachain node.
-pub async fn start_node(
-	parachain_config: Configuration,
-	collator_key: CollatorPair,
-	polkadot_config: Configuration,
-	id: ParaId,
-) -> sc_service::error::Result<(TaskManager, Arc<TFullClient<Block, RuntimeApi, ParachainRuntimeExecutor>>)> {
-	start_node_impl::<RuntimeApi, ParachainRuntimeExecutor, _, _, _>(
-		parachain_config,
-		collator_key,
-		polkadot_config,
-		id,
-		|_| Default::default(),
-		parachain_build_import_queue,
-		|client,
-		 prometheus_registry,
-		 telemetry,
-		 task_manager,
-		 relay_chain_node,
-		 transaction_pool,
-		 sync_oracle,
-		 keystore,
-		 force_authoring| {
-			let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?;
-
-			let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording(
-				task_manager.spawn_handle(),
-				client.clone(),
-				transaction_pool,
-				prometheus_registry.clone(),
-				telemetry.clone(),
-			);
-
-			let relay_chain_backend = relay_chain_node.backend.clone();
-			let relay_chain_client = relay_chain_node.client.clone();
-			Ok(build_aura_consensus::<
-				sp_consensus_aura::sr25519::AuthorityPair,
-				_,
-				_,
-				_,
-				_,
-				_,
-				_,
-				_,
-				_,
-				_,
-			>(BuildAuraConsensusParams {
-				proposer_factory,
-				create_inherent_data_providers: move |_, (relay_parent, validation_data)| {
-					let parachain_inherent =
-					cumulus_primitives_parachain_inherent::ParachainInherentData::create_at_with_client(
-						relay_parent,
-						&relay_chain_client,
-						&*relay_chain_backend,
-						&validation_data,
-						id,
-					);
-					async move {
-						let time = sp_timestamp::InherentDataProvider::from_system_time();
-
-						let slot =
-						sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_duration(
-							*time,
-							slot_duration.slot_duration(),
-						);
-
-						let parachain_inherent = parachain_inherent.ok_or_else(|| {
-							Box::<dyn std::error::Error + Send + Sync>::from(
-								"Failed to create parachain inherent",
-							)
-						})?;
-						Ok((time, slot, parachain_inherent))
-					}
-				},
-				block_import: client.clone(),
-				relay_chain_client: relay_chain_node.client.clone(),
-				relay_chain_backend: relay_chain_node.backend.clone(),
-				para_client: client.clone(),
-				backoff_authoring_blocks: Option::<()>::None,
-				sync_oracle,
-				keystore,
-				force_authoring,
-				slot_duration,
-				// We got around 500ms for proposing
-				block_proposal_slot_portion: SlotProportion::new(1f32 / 24f32),
-				telemetry,
-			}))
-		},
-	)
-	.await
-}
\ No newline at end of file
modifiedpallets/inflation/Cargo.tomldiffbeforeafterboth
--- a/pallets/inflation/Cargo.toml
+++ b/pallets/inflation/Cargo.toml
@@ -83,6 +83,7 @@
 version = '3.0.0'
 
 [dependencies.serde]
+default-features = false
 features = ['derive']
 version = '1.0.119'
 
modifiedpallets/inflation/src/lib.rsdiffbeforeafterboth
--- a/pallets/inflation/src/lib.rs
+++ b/pallets/inflation/src/lib.rs
@@ -10,8 +10,7 @@
 #[cfg(feature = "std")]
 pub use std::*;
 
-#[cfg(feature = "std")]
-pub use serde::*;
+pub use serde::{Serialize, Deserialize};
 
 #[cfg(feature = "runtime-benchmarks")]
 mod benchmarking;
modifiedpallets/nft-charge-transaction/Cargo.tomldiffbeforeafterboth
--- a/pallets/nft-charge-transaction/Cargo.toml
+++ b/pallets/nft-charge-transaction/Cargo.toml
@@ -19,7 +19,7 @@
 version = '2.0.0'
 
 [dependencies]
-serde = { version = "1.0.119" }
+serde = { version = "1.0.119", default-features = false }
 frame-support = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
 frame-system = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
 pallet-balances = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
modifiedpallets/nft-transaction-payment/Cargo.tomldiffbeforeafterboth
--- a/pallets/nft-transaction-payment/Cargo.toml
+++ b/pallets/nft-transaction-payment/Cargo.toml
@@ -19,7 +19,7 @@
 version = '2.0.0'
 
 [dependencies]
-serde = { version = "1.0.119" }
+serde = { version = "1.0.119", default-features = false }
 frame-support = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
 frame-system = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
 pallet-balances = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
modifiedpallets/nft/Cargo.tomldiffbeforeafterboth
--- a/pallets/nft/Cargo.toml
+++ b/pallets/nft/Cargo.toml
@@ -23,14 +23,23 @@
     'frame-support/std',
     'frame-system/std',
     'pallet-balances/std',
+    'pallet-evm/std',
     'pallet-timestamp/std',
     'pallet-contracts/std',
     'pallet-randomness-collective-flip/std',
     'pallet-transaction-payment/std',
+    'fp-evm/std',
     'nft-data-structs/std',
     'sp-std/std',
+    'sp-api/std',
     'sp-runtime/std',
     'frame-benchmarking/std',
+    'ethereum/std',
+    'rlp/std',
+
+    'ethereum-tx-sign',
+    'primitive-types/std',
+    'evm-coder/std',
 ]
 
 ################################################################################
@@ -98,6 +107,7 @@
 version = '3.0.0'
 
 [dependencies.serde]
+default-features = false
 features = ['derive']
 version = '1.0.119'
 
@@ -119,10 +129,26 @@
 branch = 'polkadot-v0.9.3'
 version = '3.0.0'
 
+
 ################################################################################
 # Local Dependencies
 
 [dependencies.nft-data-structs]
 default-features = false
 path = '../../primitives'
-version = '0.9.0'
\ No newline at end of file
+version = '0.9.0'
+
+
+[dependencies]
+ethereum-tx-sign = { version = "3.0.4", optional = true }
+ethereum = { default-features = false, version = "0.7.1" }
+rlp = { default-features = false, version = "0.5.0" }
+sp-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.3" }
+
+evm-coder = { default-features = false, path = "../../crates/evm-coder" }
+primitive-types = { version = "0.9.0", default-features = false, features = ["serde_no_std"] }
+
+pallet-evm = { default-features = false, version = "4.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+pallet-ethereum = { default-features = false, version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+fp-evm = { default-features = false, version = '2.0.0', git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+hex-literal = "0.3.1"
\ No newline at end of file
addedpallets/nft/src/eth/account.rsdiffbeforeafterboth
--- /dev/null
+++ b/pallets/nft/src/eth/account.rs
@@ -0,0 +1,135 @@
+use crate::Config;
+use codec::{Encode, EncodeLike, Decode};
+use sp_core::crypto::AccountId32;
+use primitive_types::H160;
+use core::cmp::Ordering;
+use serde::{Serialize, Deserialize};
+use pallet_evm::AddressMapping;
+use sp_std::vec::Vec;
+use sp_std::clone::Clone;
+
+pub trait CrossAccountId<AccountId>: 
+    Encode + EncodeLike + Decode + 
+    Clone + PartialEq + Ord + core::fmt::Debug // + 
+    // Serialize + Deserialize<'static> 
+{
+    fn as_sub(&self) -> &AccountId;
+    fn as_eth(&self) -> &H160;
+
+    fn from_sub(account: AccountId) -> Self;
+    fn from_eth(account: H160) -> Self;
+}
+
+#[derive(Eq)]
+#[derive(Serialize, Deserialize)]
+pub struct BasicCrossAccountId<T: Config> {
+    /// If true - then ethereum is canonical encoding
+    from_ethereum: bool,
+    substrate: T::AccountId,
+    ethereum: H160,
+}
+
+impl<T: Config> core::fmt::Debug for BasicCrossAccountId<T> {
+    fn fmt(&self, fmt: &mut core::fmt::Formatter) -> core::fmt::Result {
+        if self.from_ethereum {
+            fmt.debug_tuple("CrossAccountId::Ethereum")
+                .field(&self.ethereum)
+                .finish()
+        } else {
+            fmt.debug_tuple("CrossAccountId::Substrate")
+                .field(&self.substrate)
+                .finish()
+        }
+    }
+}
+
+impl<T: Config> PartialOrd for BasicCrossAccountId<T> {
+    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
+        Some(self.substrate.cmp(&other.substrate))
+    }
+}
+
+impl<T: Config> Ord for BasicCrossAccountId<T> {
+    fn cmp(&self, other: &Self) -> Ordering {
+        self.partial_cmp(other).expect("substrate account is total ordered")
+    }
+}
+
+impl<T: Config> PartialEq for BasicCrossAccountId<T> {
+    fn eq(&self, other: &Self) -> bool {
+        if self.from_ethereum == other.from_ethereum {
+            self.substrate == other.substrate && self.ethereum == other.ethereum
+        } else if self.from_ethereum {
+            // ethereum is canonical encoding, but we need to compare derived address
+            self.substrate == other.substrate
+        } else {
+            self.ethereum == other.ethereum
+        }
+    }
+}
+impl<T: Config> Clone for BasicCrossAccountId<T> {
+    fn clone(&self) -> Self {
+        Self {
+            from_ethereum: self.from_ethereum,
+            substrate: self.substrate.clone(),
+            ethereum: self.ethereum,
+        }
+    }
+}
+impl<T: Config> Encode for BasicCrossAccountId<T> {
+    fn encode(&self) -> Vec<u8> {
+        let as_result = if !self.from_ethereum {
+            Ok(self.substrate.clone())
+        } else {
+            Err(self.ethereum)
+        };
+        as_result.encode()
+    }
+}
+impl<T: Config> EncodeLike for BasicCrossAccountId<T> {}
+impl<T: Config> Decode for BasicCrossAccountId<T> {
+    fn decode<I>(input: &mut I) -> Result<Self, codec::Error>
+        where I: codec::Input
+    {
+        Ok(match <Result<T::AccountId, H160>>::decode(input)? {
+            Ok(s) => Self::from_sub(s),
+            Err(e) => Self::from_eth(e),
+        })
+    }
+}
+impl<T: Config> CrossAccountId<T::AccountId> for BasicCrossAccountId<T> {
+    fn as_sub(&self) -> &T::AccountId {
+        &self.substrate
+    }
+    fn as_eth(&self) -> &H160 {
+        &self.ethereum
+    }
+    fn from_sub(substrate: T::AccountId) -> Self {
+        Self {
+            ethereum: T::EvmBackwardsAddressMapping::from_account_id(substrate.clone()),
+            substrate,
+            from_ethereum: false,
+        }
+    }
+    fn from_eth(ethereum: H160) -> Self {
+        Self {
+            ethereum,
+            substrate: T::EvmAddressMapping::into_account_id(ethereum),
+            from_ethereum: true,
+        }
+    }
+}
+
+pub trait EvmBackwardsAddressMapping<AccountId> {
+    fn from_account_id(account_id: AccountId) -> H160;
+}
+
+/// Should have same mapping as EnsureAddressTruncated
+pub struct MapBackwardsAddressTruncated;
+impl EvmBackwardsAddressMapping<AccountId32> for MapBackwardsAddressTruncated {
+    fn from_account_id(account_id: AccountId32) -> H160 {
+        let mut out = [0; 20];
+        out.copy_from_slice(&(account_id.as_ref() as &[u8])[0..20]);
+        H160(out)
+    }
+}
\ No newline at end of file
addedpallets/nft/src/eth/erc.rsdiffbeforeafterboth
--- /dev/null
+++ b/pallets/nft/src/eth/erc.rs
@@ -0,0 +1,134 @@
+use evm_coder::{solidity_interface, solidity, types::*, ToLog};
+use sp_std::vec::Vec;
+
+#[solidity_interface]
+pub trait InlineNameSymbol {
+    type Error;
+
+    fn name(&self) -> Result<string, Self::Error>;
+    fn symbol(&self) -> Result<string, Self::Error>;
+}
+
+#[solidity_interface]
+pub trait InlineTotalSupply {
+    type Error;
+
+    fn total_supply(&self) -> Result<uint256, Self::Error>;
+}
+
+#[solidity_interface]
+pub trait ERC165 {
+    type Error;
+
+    fn supports_interface(&self, interface_id: bytes4) -> Result<bool, Self::Error>;
+}
+
+#[solidity_interface(inline_is(InlineNameSymbol))]
+pub trait ERC721Metadata {
+    type Error;
+
+    #[solidity(rename_selector = "tokenURI")]
+    fn token_uri(&self, token_id: uint256) -> Result<string, Self::Error>;
+}
+
+#[solidity_interface(inline_is(InlineTotalSupply))]
+pub trait ERC721Enumerable {
+    type Error;
+
+    fn token_by_index(&self, index: uint256) -> Result<uint256, Self::Error>;
+    fn token_of_owner_by_index(&self, owner: address, index: uint256) -> Result<uint256, Self::Error>;
+}
+
+
+#[derive(ToLog)]
+pub enum ERC721Events {
+    Transfer {
+        #[indexed] from: address,
+        #[indexed] to: address,
+        #[indexed] token_id: uint256,
+    },
+    Approval {
+        #[indexed] owner: address,
+        #[indexed] approved: address,
+        #[indexed] token_id: uint256,
+    },
+    #[allow(dead_code)]
+    ApprovalForAll {
+        #[indexed] owner: address,
+        #[indexed] operator: address,
+        approved: bool,
+    }
+}
+
+#[solidity_interface(is(ERC165), events(ERC721Events))]
+pub trait ERC721 {
+    type Error;
+
+    fn balance_of(&self, owner: address) -> Result<uint256, Self::Error>;
+    fn owner_of(&self, token_id: uint256) -> Result<address, Self::Error>;
+
+    #[solidity(rename_selector = "safeTransferFrom")]
+    fn safe_transfer_from_with_data(&mut self, from: address, to: address, token_id: uint256, data: bytes, value: value) -> Result<void, Self::Error>;
+    fn safe_transfer_from(&mut self, from: address, to: address, token_id: uint256, value: value) -> Result<void, Self::Error>;
+
+    fn transfer_from(&mut self, caller: caller, from: address, to: address, token_id: uint256, value: value) -> Result<void, Self::Error>;
+    fn approve(&mut self, caller: caller, approved: address, token_id: uint256, value: value) -> Result<void, Self::Error>;
+    fn set_approval_for_all(&mut self, caller: caller, operator: address, approved: bool) -> Result<void, Self::Error>;
+
+    fn get_approved(&self, token_id: uint256) -> Result<address, Self::Error>;
+    fn is_approved_for_all(&self, owner: address, operator: address) -> Result<address, Self::Error>;
+}
+
+#[solidity_interface]
+pub trait ERC721UniqueExtensions {
+    type Error;
+
+    fn transfer(&mut self, caller: caller, to: address, token_id: uint256, value: value) -> Result<void, Self::Error>;
+}
+
+#[solidity_interface(is(ERC165, ERC721, ERC721Metadata, ERC721Enumerable, ERC721UniqueExtensions))]
+pub trait UniqueNFT {
+    type Error;
+}
+
+#[derive(ToLog)]
+pub enum ERC20Events {
+    Transfer {
+        #[indexed] from: address,
+        #[indexed] to: address,
+        value: uint256,
+    },
+    Approval {
+        #[indexed] owner: address,
+        #[indexed] spender: address,
+        value: uint256,
+    }
+}
+
+#[solidity_interface(inline_is(InlineNameSymbol, InlineTotalSupply), events(ERC20Events))]
+pub trait ERC20 {
+    type Error;
+    
+    fn decimals(&self) -> Result<uint8, Self::Error>;
+    fn balance_of(&self, owner: address) -> Result<uint256, Self::Error>;
+    fn transfer(&mut self, caller: caller, to: address, value: uint256) -> Result<bool, Self::Error>;
+    fn transfer_from(&mut self, caller: caller, from: address, to: address, value: uint256) -> Result<bool, Self::Error>;
+    fn approve(&mut self, caller: caller, spender: address, value: uint256) -> Result<bool, Self::Error>;
+    fn allowance(&self, owner: address, spender: address) -> Result<uint256, Self::Error>;
+}
+
+#[solidity_interface(is(ERC165, ERC20))]
+pub trait UniqueFungible {
+    type Error;
+}
+
+/// Runtime metadata like helpers for evm
+#[solidity_interface]
+trait UniqueHelpers {
+    type Error;
+
+    /// Returns interface for NFT collections
+    fn nft_interface(&self) -> Result<string, Self::Error>;
+    /// Returns interface for Fungible collections
+    fn fungible_interface(&self) -> Result<string, Self::Error>;
+}
\ No newline at end of file
addedpallets/nft/src/eth/erc_impl.rsdiffbeforeafterboth
--- /dev/null
+++ b/pallets/nft/src/eth/erc_impl.rs
@@ -0,0 +1,283 @@
+use core::char::{decode_utf16, REPLACEMENT_CHARACTER};
+use evm_coder::{
+	abi::{AbiWriter, StringError},
+	types::*,
+};
+use core::convert::TryInto;
+use alloc::format;
+use crate::{Allowances, Module, Balance, CollectionHandle, CollectionMode, Config, NftItemList};
+use frame_support::storage::StorageDoubleMap;
+use pallet_evm::AddressMapping;
+use super::erc::*;
+use super::account::CrossAccountId;
+
+type Result<T> = core::result::Result<T, StringError>;
+
+impl<T: Config> InlineNameSymbol for CollectionHandle<T> {
+	type Error = StringError;
+
+	fn name(&self) -> Result<string> {
+		Ok(decode_utf16(self.name.iter().copied())
+			.map(|r| r.unwrap_or(REPLACEMENT_CHARACTER))
+			.collect::<string>())
+	}
+
+	fn symbol(&self) -> Result<string> {
+		Ok(string::from_utf8_lossy(&self.token_prefix).into())
+	}
+}
+
+impl<T: Config> InlineTotalSupply for CollectionHandle<T> {
+	type Error = StringError;
+
+	fn total_supply(&self) -> Result<uint256> {
+		// TODO: we do not track total amount of all tokens
+		Ok(0.into())
+	}
+}
+
+impl<T: Config> ERC721Metadata for CollectionHandle<T> {
+	type Error = StringError;
+
+	fn token_uri(&self, token_id: uint256) -> Result<string> {
+		// TODO: We should standartize url prefix, maybe via offchain schema?
+		Ok(format!("unique.network/{}/{}", self.id, token_id))
+	}
+
+	fn call_inline_name_symbol(&mut self, c: Msg<InlineNameSymbolCall>) -> Result<AbiWriter> {
+		<Self as InlineNameSymbol>::call(self, c)
+	}
+}
+
+impl<T: Config> ERC721Enumerable for CollectionHandle<T> {
+	type Error = StringError;
+
+	fn token_by_index(&self, index: uint256) -> Result<uint256> {
+		Ok(index)
+	}
+
+	fn token_of_owner_by_index(&self, owner: address, index: uint256) -> Result<uint256> {
+		// TODO: Not implemetable
+		Err("not implemented".into())
+	}
+
+	fn call_inline_total_supply(&mut self, c: Msg<InlineTotalSupplyCall>) -> Result<AbiWriter> {
+		<Self as InlineTotalSupply>::call(self, c)
+	}
+}
+
+impl<T: Config> ERC721 for CollectionHandle<T> {
+	type Error = StringError;
+
+	fn balance_of(&self, owner: address) -> Result<uint256> {
+		let owner = T::EvmAddressMapping::into_account_id(owner);
+		let balance = <Balance<T>>::get(self.id, owner);
+		Ok(balance.into())
+	}
+	fn owner_of(&self, token_id: uint256) -> Result<address> {
+		let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
+		let token = <NftItemList<T>>::get(self.id, token_id).ok_or("unknown token")?;
+		Ok(token.owner.as_eth().clone())
+	}
+	fn safe_transfer_from_with_data(
+		&mut self,
+		_from: address,
+		_to: address,
+		_token_id: uint256,
+		_data: bytes,
+		_value: value,
+	) -> Result<void> {
+		// TODO: Not implemetable
+		Err("not implemented".into())
+	}
+	fn safe_transfer_from(
+		&mut self,
+		_from: address,
+		_to: address,
+		_token_id: uint256,
+		_value: value,
+	) -> Result<void> {
+		// TODO: Not implemetable
+		Err("not implemented".into())
+	}
+
+	fn transfer_from(
+		&mut self,
+		caller: caller,
+		from: address,
+		to: address,
+		token_id: uint256,
+		_value: value,
+	) -> Result<void> {
+		let caller = T::CrossAccountId::from_eth(caller);
+		let from = T::CrossAccountId::from_eth(from);
+		let to = T::CrossAccountId::from_eth(to);
+		let token_id = token_id.try_into().map_err(|_| "token_id overflow")?;
+
+		<Module<T>>::transfer_from_internal(&caller, &from, &to, &self, token_id, 1)
+			.map_err(|_| "transferFrom error")?;
+		Ok(())
+	}
+
+	fn approve(
+		&mut self,
+		caller: caller,
+		approved: address,
+		token_id: uint256,
+		_value: value,
+	) -> Result<void> {
+		let caller = T::CrossAccountId::from_eth(caller);
+		let approved = T::CrossAccountId::from_eth(approved);
+		let token_id = token_id.try_into().map_err(|_| "token_id overflow")?;
+
+		<Module<T>>::approve_internal(&caller, &approved, &self, token_id, 1)
+			.map_err(|_| "approve internal")?;
+		Ok(())
+	}
+
+	fn set_approval_for_all(
+		&mut self,
+		_caller: caller,
+		_operator: address,
+		_approved: bool,
+	) -> Result<void> {
+		// TODO: Not implemetable
+		Err("not implemented".into())
+	}
+
+	fn get_approved(&self, _token_id: uint256) -> Result<address> {
+		// TODO: Not implemetable
+		Err("not implemented".into())
+	}
+
+	fn is_approved_for_all(&self, _owner: address, _operator: address) -> Result<address> {
+		// TODO: Not implemetable
+		Err("not implemented".into())
+	}
+
+	fn call_erc165(&mut self, c: Msg<ERC165Call>) -> Result<AbiWriter> {
+		let ERC165Call::SupportsInterface { interface_id } = c.call;
+		Ok(evm_coder::abi_encode!(bool(
+			&ERC721Call::supports_interface(interface_id)
+		)))
+	}
+}
+
+impl<T: Config> ERC721UniqueExtensions for CollectionHandle<T> {
+	type Error = StringError;
+	fn transfer(
+		&mut self,
+		caller: caller,
+		to: address,
+		token_id: uint256,
+		value: value,
+	) -> Result<void> {
+		let caller = T::CrossAccountId::from_eth(caller);
+		let to = T::CrossAccountId::from_eth(to);
+		let token_id = token_id.try_into().map_err(|_| "amount overflow")?;
+
+		<Module<T>>::transfer_internal(&caller, &to, &self, token_id, 1)
+			.map_err(|_| "transfer error")?;
+		Ok(())
+	}
+}
+
+impl<T: Config> UniqueNFT for CollectionHandle<T> {
+	type Error = StringError;
+	fn call_erc165(&mut self, c: Msg<ERC165Call>) -> Result<AbiWriter> {
+		let ERC165Call::SupportsInterface { interface_id } = c.call;
+		Ok(evm_coder::abi_encode!(bool(
+			&UniqueNFTCall::supports_interface(interface_id)
+		)))
+	}
+	fn call_erc721(&mut self, c: Msg<ERC721Call>) -> Result<AbiWriter> {
+		<Self as ERC721>::call(self, c)
+	}
+	fn call_erc721_metadata(&mut self, c: Msg<ERC721MetadataCall>) -> Result<AbiWriter> {
+		<Self as ERC721Metadata>::call(self, c)
+	}
+	fn call_erc721_enumerable(&mut self, c: Msg<ERC721EnumerableCall>) -> Result<AbiWriter> {
+		<Self as ERC721Enumerable>::call(self, c)
+	}
+	fn call_erc721_unique_extensions(
+		&mut self,
+		c: Msg<ERC721UniqueExtensionsCall>,
+	) -> Result<AbiWriter> {
+		<Self as ERC721UniqueExtensions>::call(self, c)
+	}
+}
+
+impl<T: Config> ERC20 for CollectionHandle<T> {
+	type Error = StringError;
+	fn decimals(&self) -> Result<uint8> {
+		Ok(if let CollectionMode::Fungible(decimals) = &self.mode {
+			*decimals
+		} else {
+			unreachable!()
+		})
+	}
+	fn balance_of(&self, owner: address) -> Result<uint256> {
+		let owner = T::EvmAddressMapping::into_account_id(owner);
+		let balance = <Balance<T>>::get(self.id, owner);
+		Ok(balance.into())
+	}
+	fn transfer(&mut self, caller: caller, to: address, amount: uint256) -> Result<bool> {
+		let caller = T::CrossAccountId::from_eth(caller);
+		let to = T::CrossAccountId::from_eth(to);
+		let amount = amount.try_into().map_err(|_| "amount overflow")?;
+
+		<Module<T>>::transfer_internal(&caller, &to, &self, 1, amount)
+			.map_err(|_| "transfer error")?;
+		Ok(true)
+	}
+	fn transfer_from(
+		&mut self,
+		caller: caller,
+		from: address,
+		to: address,
+		amount: uint256,
+	) -> Result<bool> {
+		let caller = T::CrossAccountId::from_eth(caller);
+		let from = T::CrossAccountId::from_eth(from);
+		let to = T::CrossAccountId::from_eth(to);
+		let amount = amount.try_into().map_err(|_| "amount overflow")?;
+
+		<Module<T>>::transfer_from_internal(&caller, &from, &to, &self, 1, amount)
+			.map_err(|_| "transferFrom error")?;
+		Ok(true)
+	}
+	fn approve(&mut self, caller: caller, spender: address, amount: uint256) -> Result<bool> {
+		let caller = T::CrossAccountId::from_eth(caller);
+		let spender = T::CrossAccountId::from_eth(spender);
+		let amount = amount.try_into().map_err(|_| "amount overflow")?;
+
+		<Module<T>>::approve_internal(&caller, &spender, &self, 1, amount)
+			.map_err(|_| "approve internal")?;
+		Ok(true)
+	}
+	fn allowance(&self, owner: address, spender: address) -> Result<uint256> {
+		let owner = T::CrossAccountId::from_eth(owner);
+		let spender = T::CrossAccountId::from_eth(spender);
+
+		Ok(<Allowances<T>>::get(self.id, (1, owner.as_sub(), spender.as_sub())).into())
+	}
+	fn call_inline_name_symbol(&mut self, c: Msg<InlineNameSymbolCall>) -> Result<AbiWriter> {
+		<Self as InlineNameSymbol>::call(self, c)
+	}
+	fn call_inline_total_supply(&mut self, c: Msg<InlineTotalSupplyCall>) -> Result<AbiWriter> {
+		<Self as InlineTotalSupply>::call(self, c)
+	}
+}
+
+impl<T: Config> UniqueFungible for CollectionHandle<T> {
+	type Error = StringError;
+	fn call_erc165(&mut self, c: Msg<ERC165Call>) -> Result<AbiWriter> {
+		let ERC165Call::SupportsInterface { interface_id } = c.call;
+		Ok(evm_coder::abi_encode!(bool(
+			&UniqueNFTCall::supports_interface(interface_id)
+		)))
+	}
+	fn call_erc20(&mut self, c: Msg<ERC20Call>) -> Result<AbiWriter> {
+		<Self as ERC20>::call(self, c)
+	}
+}
addedpallets/nft/src/eth/log.rsdiffbeforeafterboth
--- /dev/null
+++ b/pallets/nft/src/eth/log.rs
@@ -0,0 +1,19 @@
+use sp_std::cell::RefCell;
+use sp_std::vec::Vec;
+use sp_core::{H160, H256};
+use ethereum::Log;
+
+#[derive(Default)]
+pub struct LogRecorder(RefCell<Vec<Log>>);
+
+impl LogRecorder {
+    pub fn is_empty(&self) -> bool {
+        self.0.borrow().is_empty()
+    }
+    pub fn log(&self, log: Log) {
+        self.0.borrow_mut().push(log);
+    }
+    pub fn retrieve_logs(self) -> Vec<Log> {
+        self.0.into_inner()
+    }
+}
addedpallets/nft/src/eth/mod.rsdiffbeforeafterboth
--- /dev/null
+++ b/pallets/nft/src/eth/mod.rs
@@ -0,0 +1,188 @@
+pub mod account;
+pub mod erc;
+mod erc_impl;
+pub mod log;
+pub mod sponsoring;
+
+use evm_coder::abi::AbiWriter;
+use evm_coder::abi::StringError;
+use sp_std::prelude::*;
+use sp_std::borrow::ToOwned;
+use sp_std::vec::Vec;
+
+use pallet_evm::{PrecompileOutput, ExitReason, ExitRevert, ExitSucceed};
+use sp_core::{H160, U256};
+use frame_support::storage::StorageMap;
+
+use crate::{Config, CollectionById, CollectionHandle, CollectionId, CollectionMode};
+
+use erc::{UniqueFungible, UniqueFungibleCall, UniqueNFT, UniqueNFTCall};
+use evm_coder::{types::*, abi::AbiReader};
+
+pub struct NftErcSupport<T: Config>(core::marker::PhantomData<T>);
+
+// 0x17c4e6453Cc49AAAaEACA894e6D9683e00000001 - collection
+// TODO: Unhardcode prefix
+const ETH_ACCOUNT_PREFIX: [u8; 16] = [
+	0x17, 0xc4, 0xe6, 0x45, 0x3c, 0xc4, 0x9a, 0xaa, 0xae, 0xac, 0xa8, 0x94, 0xe6, 0xd9, 0x68, 0x3e,
+];
+
+fn map_eth_to_id(eth: &H160) -> Option<CollectionId> {
+	if &eth[0..16] != ETH_ACCOUNT_PREFIX {
+		return None;
+	}
+	let mut id_bytes = [0; 4];
+	id_bytes.copy_from_slice(&eth[16..20]);
+	Some(u32::from_be_bytes(id_bytes))
+}
+pub fn collection_id_to_address(id: u32) -> H160 {
+	let mut out = [0; 20];
+	out[0..16].copy_from_slice(&ETH_ACCOUNT_PREFIX);
+	out[16..20].copy_from_slice(&u32::to_be_bytes(id));
+	H160(out)
+}
+
+fn call_internal<T: Config>(
+	collection: &mut CollectionHandle<T>,
+	caller: caller,
+	method_id: u32,
+	mut input: AbiReader,
+	value: U256,
+) -> Result<Option<AbiWriter>, evm_coder::abi::StringError> {
+	match collection.mode.clone() {
+		CollectionMode::Fungible(_) => {
+			#[cfg(feature = "std")]
+			{
+				println!("Parse fungible call {:x}", method_id);
+			}
+			let call = match UniqueFungibleCall::parse(method_id, &mut input)? {
+				Some(v) => v,
+				None => {
+					#[cfg(feature = "std")]
+					{
+						println!("Method not found");
+					}
+					return Ok(None);
+				}
+			};
+			#[cfg(feature = "std")]
+			{
+				dbg!(&call);
+			}
+			Ok(Some(<CollectionHandle<T> as UniqueFungible>::call(
+				collection,
+				Msg {
+					call,
+					caller,
+					value,
+				},
+			)?))
+		}
+		CollectionMode::NFT => {
+			let call = match UniqueNFTCall::parse(method_id, &mut input)? {
+				Some(v) => v,
+				None => return Ok(None),
+			};
+			Ok(Some(<CollectionHandle<T> as UniqueNFT>::call(
+				collection,
+				Msg {
+					call,
+					caller,
+					value,
+				},
+			)?))
+		}
+		_ => {
+			return Err(StringError::from(
+				"erc calls only supported to fungible and nft collections for now",
+			)
+			.into())
+		}
+	}
+}
+
+impl<T: Config> pallet_evm::OnMethodCall<T> for NftErcSupport<T> {
+	fn is_reserved(target: &H160) -> bool {
+		map_eth_to_id(target).is_some()
+	}
+	fn is_used(target: &H160) -> bool {
+		map_eth_to_id(target)
+			.map(<CollectionById<T>>::contains_key)
+			.unwrap_or(false)
+	}
+	fn get_code(target: &H160) -> Option<Vec<u8>> {
+		map_eth_to_id(&target)
+			.and_then(<CollectionById<T>>::get)
+			.map(|collection| {
+				match collection.mode {
+					CollectionMode::NFT => include_bytes!("stubs/ERC721.bin") as &[u8],
+					CollectionMode::Fungible(_) => include_bytes!("stubs/ERC20.bin") as &[u8],
+					CollectionMode::ReFungible => include_bytes!("stubs/ERC1633.bin") as &[u8],
+					CollectionMode::Invalid => include_bytes!("stubs/Invalid.bin") as &[u8],
+				}
+				.to_owned()
+			})
+	}
+	fn call(
+		source: &H160,
+		target: &H160,
+		gas_limit: u64,
+		input: &[u8],
+		value: U256,
+	) -> Option<PrecompileOutput> {
+		let mut collection = map_eth_to_id(&target)
+			.and_then(|id| <CollectionHandle<T>>::get_with_gas_limit(id, gas_limit))?;
+		let (method_id, input) = AbiReader::new_call(input).unwrap();
+		let result = call_internal(&mut collection, *source, method_id, input, value);
+		let cost = gas_limit - collection.gas_left();
+		let logs = collection.logs.retrieve_logs();
+		match result {
+			Ok(Some(v)) => Some(PrecompileOutput {
+				exit_status: ExitReason::Succeed(ExitSucceed::Returned),
+				cost,
+				logs,
+				output: v.finish(),
+			}),
+			Ok(None) => None,
+			Err(e) => Some(PrecompileOutput {
+				exit_status: ExitReason::Revert(ExitRevert::Reverted),
+				cost: 0,
+				logs: Default::default(),
+				output: AbiWriter::from(e).finish(),
+			}),
+		}
+	}
+}
+
+// TODO: This function is slow, and output can be memoized
+pub fn generate_transaction(collection_id: u32, chain_id: u64) -> ethereum::Transaction {
+	let contract = collection_id_to_address(collection_id);
+
+	// FIXME: Can be done on wasm runtime with https://github.com/paritytech/substrate/pull/8728
+	#[cfg(feature = "std")]
+	{
+		let signed = ethereum_tx_sign::RawTransaction {
+			nonce: 0.into(),
+			to: Some(contract.0.into()),
+			value: 0.into(),
+			gas_price: 0.into(),
+			gas: 0.into(),
+			// zero selector, this transaction always have same sender, so all data should be acquired from logs
+			data: Vec::from([0, 0, 0, 0]),
+		}
+		.sign(
+			// TODO: move to pallet config
+			// 0xF70631E55faff9f3FD3681545aa6c724226a3853
+			// 9dbaef9b3ebc00e53f67c6a77bcfbf2c4f2aebe4d70d94af4f2df01744b7a91a
+			&hex_literal::hex!("9dbaef9b3ebc00e53f67c6a77bcfbf2c4f2aebe4d70d94af4f2df01744b7a91a")
+				.into(),
+			&chain_id,
+		);
+		rlp::decode::<ethereum::Transaction>(&signed)
+			.expect("transaction is just created, it can't be broken")
+	}
+	#[cfg(not(feature = "std"))]
+	{
+		panic!("transaction generation not yet supported by wasm runtime")
+	}
+}
addedpallets/nft/src/eth/sponsoring.rsdiffbeforeafterboth
--- /dev/null
+++ b/pallets/nft/src/eth/sponsoring.rs
@@ -0,0 +1,142 @@
+//! Implements EVM sponsoring logic via OnChargeEVMTransaction
+
+use crate::{Collection, ChainLimit, CollectionById, Config, NftTransferBasket, FungibleTransferBasket, eth::account::EvmBackwardsAddressMapping};
+use evm_coder::abi::AbiReader;
+use frame_support::{storage::{StorageMap, StorageDoubleMap, StorageValue}, traits::Currency};
+use pallet_evm::{EVMCurrencyAdapter, WithdrawReason};
+use sp_core::{H160, U256};
+use sp_std::prelude::*;
+use super::{account::CrossAccountId, erc::{UniqueFungibleCall, UniqueNFTCall, ERC721Call, ERC20Call, ERC721UniqueExtensionsCall}};
+use core::convert::TryInto;
+
+type NegativeImbalanceOf<C, T> =
+    <C as Currency<<T as frame_system::Config>::AccountId>>::NegativeImbalance;
+
+pub struct ChargeEvmTransaction;
+pub struct ChargeEvmLiquidityInfo<T>
+where
+    T: Config,
+    T: pallet_evm::Config,
+{
+    who: H160,
+    negative_imbalance: NegativeImbalanceOf<<T as Config>::Currency, T>,
+}
+
+struct AnyError;
+
+fn try_sponsor<T: Config>(caller: &H160, collection_id: u32, collection: &Collection<T>, call: &[u8]) -> Result<(), AnyError> {
+    let (method_id, mut reader) = AbiReader::new_call(call).map_err(|_| AnyError)?;
+    match &collection.mode {
+        crate::CollectionMode::NFT => {
+            let call: UniqueNFTCall = UniqueNFTCall::parse(method_id, &mut reader).map_err(|_| AnyError)?.ok_or(AnyError)?;
+            match call {
+                UniqueNFTCall::ERC721UniqueExtensions(ERC721UniqueExtensionsCall::Transfer {token_id, ..}) | UniqueNFTCall::ERC721(ERC721Call::TransferFrom {token_id, ..})  => {
+                    let token_id: u32 = token_id.try_into().map_err(|_| AnyError)?;
+                    let block_number = <frame_system::Module<T>>::block_number() as T::BlockNumber;
+                    let collection_limits = &collection.limits;
+                    let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
+                        collection_limits.sponsor_transfer_timeout
+                    } else {
+                        ChainLimit::get().nft_sponsor_transfer_timeout
+                    };
+
+                    let mut sponsor = true;
+                    if <NftTransferBasket<T>>::contains_key(collection_id, token_id) {
+                        let last_tx_block = <NftTransferBasket<T>>::get(collection_id, token_id);
+                        let limit_time = last_tx_block + limit.into();
+                        if block_number <= limit_time {
+                            sponsor = false;
+                        }
+                    }
+                    if sponsor {
+                        <NftTransferBasket<T>>::insert(collection_id, token_id, block_number);
+                        return Ok(())
+                    }
+                },
+                _ => {},
+            }
+        },
+        crate::CollectionMode::Fungible(_) => {
+            let call: UniqueFungibleCall = UniqueFungibleCall::parse(method_id, &mut reader).map_err(|_| AnyError)?.ok_or(AnyError)?;
+            match call {
+                UniqueFungibleCall::ERC20(ERC20Call::Transfer {..})  => {
+                    let who = T::CrossAccountId::from_eth(caller.clone());
+                    let collection_limits = &collection.limits;
+                    let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
+                        collection_limits.sponsor_transfer_timeout
+                    } else {
+                        ChainLimit::get().fungible_sponsor_transfer_timeout
+                    };
+
+                    let block_number = <frame_system::Module<T>>::block_number() as T::BlockNumber;
+                    let mut sponsored = true;
+                    if <FungibleTransferBasket<T>>::contains_key(collection_id, who.as_sub()) {
+                        let last_tx_block = <FungibleTransferBasket<T>>::get(collection_id, who.as_sub());
+                        let limit_time = last_tx_block + limit.into();
+                        if block_number <= limit_time {
+                            sponsored = false;
+                        }
+                    }
+                    if sponsored {
+                        <FungibleTransferBasket<T>>::insert(collection_id, who.as_sub(), block_number);
+                        return Ok(())
+                    }
+                },
+                _ => {},
+            }
+        },
+        _ => {},
+    }
+    return Err(AnyError)
+}
+
+impl<T> pallet_evm::OnChargeEVMTransaction<T> for ChargeEvmTransaction
+where
+    T: Config,
+    T: pallet_evm::Config,
+{
+    type LiquidityInfo = Option<ChargeEvmLiquidityInfo<T>>;
+
+    fn withdraw_fee(
+        who: &H160,
+        reason: WithdrawReason,
+        fee: U256,
+    ) -> Result<Self::LiquidityInfo, pallet_evm::Error<T>> {
+        let mut who_pays_fee = *who;
+        if let WithdrawReason::Call { target, input } = &reason {
+            if let Some(collection_id) = crate::eth::map_eth_to_id(&target) {
+                if let Some(collection) = <CollectionById<T>>::get(collection_id) {
+                    if let Some(sponsor) = collection.sponsorship.sponsor() {
+                        if try_sponsor(who, collection_id, &collection, &input).is_ok() {
+                            who_pays_fee =
+                                T::EvmBackwardsAddressMapping::from_account_id(sponsor.clone());
+                        }
+                    }
+                }
+            }
+        }
+
+        // TODO: Pay fee from substrate address
+        let negative_imbalance = EVMCurrencyAdapter::<<T as Config>::Currency, ()>::withdraw_fee(
+            &who_pays_fee,
+            reason,
+            fee,
+        )?;
+        Ok(negative_imbalance.map(|i| ChargeEvmLiquidityInfo {
+            who: who_pays_fee,
+            negative_imbalance: i,
+        }))
+    }
+
+    fn correct_and_deposit_fee(
+        who: &H160,
+        corrected_fee: U256,
+        already_withdrawn: Self::LiquidityInfo,
+    ) -> Result<(), pallet_evm::Error<T>> {
+        EVMCurrencyAdapter::<<T as Config>::Currency, ()>::correct_and_deposit_fee(
+            &already_withdrawn.as_ref().map(|e| e.who).unwrap_or(*who),
+            corrected_fee,
+            already_withdrawn.map(|e| e.negative_imbalance),
+        )
+    }
+}
addedpallets/nft/src/eth/stubs/ERC1633.bindiffbeforeafterboth
--- /dev/null
+++ b/pallets/nft/src/eth/stubs/ERC1633.bin
@@ -0,0 +1 @@
+TODO
\ No newline at end of file
addedpallets/nft/src/eth/stubs/ERC20.bindiffbeforeafterboth

binary blob — no preview

addedpallets/nft/src/eth/stubs/ERC20.soldiffbeforeafterboth
--- /dev/null
+++ b/pallets/nft/src/eth/stubs/ERC20.sol
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: OTHER
+
+pragma solidity >=0.8.0 <0.9.0;
+
+contract ERC20 {
+	uint8 _dummy = 0;
+	string stub_error = "this contract does not exists, code for collections is implemented at pallet side";
+
+	// 0x18160ddd
+	function totalSupply() external view returns (uint256) {
+		require(false, stub_error);
+		_dummy;
+		return 0;
+	}
+
+	// 0x70a08231
+	function balanceOf(address account) external view returns (uint256) {
+		require(false, stub_error);
+		account;
+		_dummy;
+		return 0;
+	}
+
+	// 0xa9059cbb
+	function transfer(address recipient, uint256 amount) external returns (bool) {
+		require(false, stub_error);
+		recipient;
+		amount;
+		_dummy = 0;
+		return false;
+	}
+
+	// 0xdd62ed3e
+	function allowance(address owner, address spender) external view returns (uint256) {
+		require(false, stub_error);
+		owner;
+		spender;
+		return _dummy;
+	}
+
+	// 0x095ea7b3
+	function approve(address spender, uint256 amount) external returns (bool) {
+		require(false, stub_error);
+		spender;
+		amount;
+		_dummy = 0;
+		return false;
+	}
+
+	// 0x23b872dd
+	function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) {
+		require(false, stub_error);
+		sender;
+		recipient;
+		amount;
+		_dummy = 0;
+		return false;
+	}
+
+	// While ERC165 is not required by spec of ERC20, better implement it
+	// 0x01ffc9a7
+	function supportsInterface(bytes4 interfaceID) public pure returns (bool) {
+		return 
+			// ERC20
+			interfaceID == 0x36372b07 || 
+			// ERC165
+			interfaceID == 0x01ffc9a7;
+	}
+}
\ No newline at end of file
addedpallets/nft/src/eth/stubs/ERC721.bindiffbeforeafterboth
--- /dev/null
+++ b/pallets/nft/src/eth/stubs/ERC721.bin
@@ -0,0 +1 @@
+0x608060405260008060006101000a81548160ff021916908360ff16021790555060008060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180608001604052806051815260200162000cd6605191396001908051906020019061008f9291906100a2565b5034801561009c57600080fd5b506101a6565b8280546100ae90610145565b90600052602060002090601f0160209004810192826100d05760008555610117565b82601f106100e957805160ff1916838001178555610117565b82800160010185558215610117579182015b828111156101165782518255916020019190600101906100fb565b5b5090506101249190610128565b5090565b5b80821115610141576000816000905550600101610129565b5090565b6000600282049050600182168061015d57607f821691505b6020821081141561017157610170610177565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b610b2080620001b66000396000f3fe6080604052600436106100915760003560e01c80636352211e116100595780636352211e1461016457806370a08231146101a1578063a22cb465146101de578063b88d4fde14610207578063e985e9c51461022357610091565b806301ffc9a714610096578063081812fc146100d3578063095ea7b31461011057806323b872dd1461012c57806342842e0e14610148575b600080fd5b3480156100a257600080fd5b506100bd60048036038101906100b89190610821565b610260565b6040516100ca919061093b565b60405180910390f35b3480156100df57600080fd5b506100fa60048036038101906100f5919061084a565b6102c2565b6040516101079190610920565b60405180910390f35b61012a600480360381019061012591906107e5565b610333565b005b610146600480360381019061014191906106da565b61037d565b005b610162600480360381019061015d91906106da565b6103c8565b005b34801561017057600080fd5b5061018b6004803603810190610186919061084a565b610413565b6040516101989190610920565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c39190610675565b610484565b6040516101d59190610978565b60405180910390f35b3480156101ea57600080fd5b50610205600480360381019061020091906107a9565b6104d4565b005b610221600480360381019061021c9190610729565b610539565b005b34801561022f57600080fd5b5061024a6004803603810190610245919061069e565b610586565b604051610257919061093b565b60405180910390f35b60006380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806102bb57506301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080600190610308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ff9190610956565b60405180910390fd5b50600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600190610378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036f9190610956565b60405180910390fd5b505050565b60006001906103c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b99190610956565b60405180910390fd5b50505050565b600060019061040d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104049190610956565b60405180910390fd5b50505050565b600080600190610459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104509190610956565b60405180910390fd5b50600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000806001906104ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c19190610956565b60405180910390fd5b5060009050919050565b6000600190610519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105109190610956565b60405180910390fd5b5060008060006101000a81548160ff021916908360ff1602179055505050565b600060019061057e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105759190610956565b60405180910390fd5b505050505050565b6000806001906105cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c39190610956565b60405180910390fd5b506000905092915050565b6000813590506105e681610a8e565b92915050565b6000813590506105fb81610aa5565b92915050565b60008135905061061081610abc565b92915050565b60008083601f84011261062857600080fd5b8235905067ffffffffffffffff81111561064157600080fd5b60208301915083600182028301111561065957600080fd5b9250929050565b60008135905061066f81610ad3565b92915050565b60006020828403121561068757600080fd5b6000610695848285016105d7565b91505092915050565b600080604083850312156106b157600080fd5b60006106bf858286016105d7565b92505060206106d0858286016105d7565b9150509250929050565b6000806000606084860312156106ef57600080fd5b60006106fd868287016105d7565b935050602061070e868287016105d7565b925050604061071f86828701610660565b9150509250925092565b60008060008060006080868803121561074157600080fd5b600061074f888289016105d7565b9550506020610760888289016105d7565b945050604061077188828901610660565b935050606086013567ffffffffffffffff81111561078e57600080fd5b61079a88828901610616565b92509250509295509295909350565b600080604083850312156107bc57600080fd5b60006107ca858286016105d7565b92505060206107db858286016105ec565b9150509250929050565b600080604083850312156107f857600080fd5b6000610806858286016105d7565b925050602061081785828601610660565b9150509250929050565b60006020828403121561083357600080fd5b600061084184828501610601565b91505092915050565b60006020828403121561085c57600080fd5b600061086a84828501610660565b91505092915050565b61087c816109b9565b82525050565b61088b816109cb565b82525050565b6000815461089e81610a2d565b6108a881866109a8565b945060018216600081146108c357600181146108d557610908565b60ff1983168652602086019350610908565b6108de85610993565b60005b83811015610900578154818901526001820191506020810190506108e1565b808801955050505b50505092915050565b61091a81610a23565b82525050565b60006020820190506109356000830184610873565b92915050565b60006020820190506109506000830184610882565b92915050565b600060208201905081810360008301526109708184610891565b905092915050565b600060208201905061098d6000830184610911565b92915050565b60008190508160005260206000209050919050565b600082825260208201905092915050565b60006109c482610a03565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680610a4557607f821691505b60208210811415610a5957610a58610a5f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b610a97816109b9565b8114610aa257600080fd5b50565b610aae816109cb565b8114610ab957600080fd5b50565b610ac5816109d7565b8114610ad057600080fd5b50565b610adc81610a23565b8114610ae757600080fd5b5056fea26469706673582212206e53fcc41e6b23f5bd49a262462ecf5ff647f480649658ee8b67c91a8f733ba864736f6c634300080100337468697320636f6e747261637420646f6573206e6f74206578697374732c20636f646520666f7220636f6c6c656374696f6e7320697320696d706c656d656e7465642061742070616c6c65742073696465
\ No newline at end of file
addedpallets/nft/src/eth/stubs/ERC721.soldiffbeforeafterboth
--- /dev/null
+++ b/pallets/nft/src/eth/stubs/ERC721.sol
@@ -0,0 +1,163 @@
+// SPDX-License-Identifier: OTHER
+
+pragma solidity >=0.8.0 <0.9.0;
+
+contract ERC721 {
+    uint8 _dummy = 0;
+    address _dummy_addr = 0x0000000000000000000000000000000000000000;
+    string _dummy_string = "";
+    string stub_error =
+        "this contract does not exists, code for collections is implemented at pallet side";
+
+    event Transfer(
+        address indexed from,
+        address indexed to,
+        uint256 indexed tokenId
+    );
+
+    event Approval(
+        address indexed owner,
+        address indexed approved,
+        uint256 indexed tokenId
+    );
+
+    event ApprovalForAll(
+        address indexed owner,
+        address indexed operator,
+        bool approved
+    );
+
+	// 0x18160ddd
+    function totalSupply() external view returns (uint256) {
+        require(false, stub_error);
+        return 0;
+    }
+
+    function name() external view returns (string memory res_name) {
+        require(false, stub_error);
+        res_name = _dummy_string;
+    }
+
+    function symbol() external view returns (string memory res_symbol) {
+        require(false, stub_error);
+        res_symbol = _dummy_string;
+    }
+
+    function tokenURI(uint256 tokenId) external view returns (string memory) {
+        require(false, stub_error);
+        tokenId;
+        return _dummy_string;
+    }
+
+    function tokenByIndex(uint256 index) external view returns (uint256) {
+        require(false, stub_error);
+        index;
+		return 0;
+    }
+
+    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256) {
+        require(false, stub_error);
+		owner;
+		index;
+		return 0;
+    }
+
+    // 0x70a08231
+    function balanceOf(address owner) external view returns (uint256) {
+        require(false, stub_error);
+        owner;
+        return 0;
+    }
+
+    // 0x6352211e
+    function ownerOf(uint256 tokenId) external view returns (address) {
+        require(false, stub_error);
+        tokenId;
+        return _dummy_addr;
+    }
+
+    // 0xb88d4fde
+    function safeTransferFrom(
+        address from,
+        address to,
+        uint256 tokenId,
+        bytes calldata data
+    ) external payable {
+        require(false, stub_error);
+        from;
+        to;
+        tokenId;
+        data;
+    }
+
+    // 0x42842e0e
+    function safeTransferFrom(
+        address from,
+        address to,
+        uint256 tokenId
+    ) external payable {
+        require(false, stub_error);
+        from;
+        to;
+        tokenId;
+    }
+
+    // 0x23b872dd
+    function transferFrom(
+        address from,
+        address to,
+        uint256 tokenId
+    ) external payable {
+        require(false, stub_error);
+        from;
+        to;
+        tokenId;
+    }
+
+    // 0x095ea7b3
+    function approve(address approved, uint256 tokenId) external payable {
+        require(false, stub_error);
+        approved;
+        tokenId;
+    }
+
+    // 0xa22cb465
+    function setApprovalForAll(address operator, bool approved) external {
+        require(false, stub_error);
+        operator;
+        approved;
+        _dummy = 0;
+    }
+
+    // 0x081812fc
+    function getApproved(uint256 tokenId) external view returns (address) {
+        require(false, stub_error);
+        tokenId;
+        return _dummy_addr;
+    }
+
+    // 0xe985e9c5
+    function isApprovedForAll(address owner, address operator)
+        external
+        view
+        returns (bool)
+    {
+        require(false, stub_error);
+        owner;
+        operator;
+        return false;
+    }
+
+    // 0x01ffc9a7
+    function supportsInterface(bytes4 interfaceID) public pure returns (bool) {
+        return
+            // ERC721
+            interfaceID == 0x80ac58cd ||
+            // ERC721Metadata
+            interfaceID == 0x5b5e139f ||
+            // ERC721Enumerable
+            interfaceID == 0x780e9d63 ||
+            // ERC165
+            interfaceID == 0x01ffc9a7;
+    }
+}
addedpallets/nft/src/eth/stubs/Invalid.bindiffbeforeafterboth
--- /dev/null
+++ b/pallets/nft/src/eth/stubs/Invalid.bin
@@ -0,0 +1 @@
+TODO
\ No newline at end of file
modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -7,11 +7,9 @@
 
 #![cfg_attr(not(feature = "std"), no_std)]
 
-#[cfg(feature = "std")]
-pub use std::*;
+extern crate alloc;
 
-#[cfg(feature = "std")]
-pub use serde::*;
+pub use serde::{Serialize, Deserialize};
 
 pub use frame_support::{
     construct_runtime, decl_event, decl_module, decl_storage, decl_error,
@@ -31,8 +29,10 @@
 };
 
 use frame_system::{self as system, ensure_signed, ensure_root};
+use sp_core::H160;
 use sp_runtime::sp_std::prelude::Vec;
 use core::ops::{Deref, DerefMut};
+use core::cell::RefCell;
 use nft_data_structs::{
     MAX_DECIMAL_POINTS, MAX_SPONSOR_TIMEOUT, MAX_TOKEN_OWNERSHIP, MAX_REFUNGIBLE_PIECES,
 	AccessMode, ChainLimits, Collection, CreateItemData, CollectionLimits,
@@ -40,6 +40,7 @@
     SchemaVersion, SponsorshipState, Ownership,
     NftItemType, FungibleItemType, ReFungibleItemType
 };
+use pallet_ethereum::EthereumTransactionSender;
 
 #[cfg(test)]
 mod mock;
@@ -48,7 +49,12 @@
 mod tests;
 
 mod default_weights;
+mod eth;
 
+pub use eth::NftErcSupport;
+pub use eth::account::*;
+use eth::erc::{ERC20Events, ERC721Events};
+
 #[cfg(feature = "runtime-benchmarks")]
 mod benchmarking;
 
@@ -162,15 +168,51 @@
         WrongRefungiblePieces,
         /// createRefungible should be called with one owner
         BadCreateRefungibleCall,
+        /// Gas limit exceeded
+        OutOfGas,
 	}
 }
 
-pub struct CollectionHandle<T: system::Config> {
+pub struct CollectionHandle<T: Config> {
     pub id: CollectionId,
-    pub collection: Collection<T>,
+    collection: Collection<T>,
+    logs: eth::log::LogRecorder,
+    evm_address: H160,
+    gas_limit: RefCell<u64>,
 }
-
-impl<T: frame_system::Config> Deref for CollectionHandle<T> {
+impl<T: Config> CollectionHandle<T> {
+	pub fn get_with_gas_limit(id: CollectionId, gas_limit: u64) -> Option<Self> {
+		<CollectionById<T>>::get(id)
+			.map(|collection| Self {
+				id,
+				collection,
+                logs: eth::log::LogRecorder::default(),
+                evm_address: eth::collection_id_to_address(id),
+                gas_limit: RefCell::new(gas_limit),
+			})
+	}
+    pub fn get(id: CollectionId) -> Option<Self> {
+        Self::get_with_gas_limit(id, u64::MAX)
+    }
+    pub fn gas_left(&self) -> u64 {
+        *self.gas_limit.borrow()
+    }
+    pub fn consume_gas(&self, gas: u64) -> DispatchResult {
+        let mut gas_limit = self.gas_limit.borrow_mut();
+        if *gas_limit < gas {
+            fail!(Error::<T>::OutOfGas);
+        }
+        *gas_limit -= gas;
+        Ok(())
+    }
+    pub fn log(&self, log: impl evm_coder::ToLog) {
+        self.logs.log(log.to_log(self.evm_address))
+    }
+    pub fn into_inner(self) -> Collection<T> {
+        self.collection.clone()
+    }
+}
+impl<T: Config> Deref for CollectionHandle<T> {
     type Target = Collection<T>;
 
     fn deref(&self) -> &Self::Target {
@@ -178,7 +220,7 @@
     }
 }
 
-impl<T: frame_system::Config> DerefMut for CollectionHandle<T> {
+impl<T: Config> DerefMut for CollectionHandle<T> {
     fn deref_mut(&mut self) -> &mut Self::Target {
         &mut self.collection
     }
@@ -190,9 +232,17 @@
     /// Weight information for extrinsics in this pallet.
 	type WeightInfo: WeightInfo;
 
+    type EvmAddressMapping: pallet_evm::AddressMapping<Self::AccountId>;
+    type EvmBackwardsAddressMapping: EvmBackwardsAddressMapping<Self::AccountId>;
+    type EvmWithdrawOrigin: pallet_evm::EnsureAddressOrigin<Self::Origin, Success = Self::AccountId>;
+
+	type CrossAccountId: CrossAccountId<Self::AccountId>;
     type Currency: Currency<Self::AccountId>;
     type CollectionCreationPrice: Get<<<Self as Config>::Currency as Currency<Self::AccountId>>::Balance>;
     type TreasuryAccountId: Get<Self::AccountId>;
+
+    type EthereumChainId: Get<u64>;
+    type EthereumTransactionSender: pallet_ethereum::EthereumTransactionSender;
 }
 
 // # Used definitions
@@ -249,7 +299,7 @@
         pub CollectionById get(fn collection_id) config(): map hasher(blake2_128_concat) CollectionId => Option<Collection<T>> = None;
         /// List of collection admins
         /// Collection id (controlled?2)
-        pub AdminList get(fn admin_list_collection): map hasher(blake2_128_concat) CollectionId => Vec<T::AccountId>;
+        pub AdminList get(fn admin_list_collection): map hasher(blake2_128_concat) CollectionId => Vec<T::CrossAccountId>;
         /// Whitelisted collection users
         /// Collection id (controlled?2), user id (controlled?3)
         pub WhiteList get(fn white_list): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) T::AccountId => bool;
@@ -266,11 +316,11 @@
 
         //#region Item collections
         /// Collection id (controlled?2), token id (controlled?1)
-        pub NftItemList get(fn nft_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) TokenId => Option<NftItemType<T::AccountId>>;
+        pub NftItemList get(fn nft_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) TokenId => Option<NftItemType<T::CrossAccountId>>;
         /// Collection id (controlled?2), owner (controlled?2)
         pub FungibleItemList get(fn fungible_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) T::AccountId => FungibleItemType;
         /// Collection id (controlled?2), token id (controlled?1)
-        pub ReFungibleItemList get(fn refungible_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) TokenId => Option<ReFungibleItemType<T::AccountId>>;
+        pub ReFungibleItemList get(fn refungible_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) TokenId => Option<ReFungibleItemType<T::CrossAccountId>>;
         //#endregion
 
         //#region Index list
@@ -321,7 +371,7 @@
             }
 
             for (collection_id, account_id, fungible_item) in &config.fungible_item_id {
-                <Module<T>>::init_fungible_token(*collection_id, account_id, fungible_item);
+                <Module<T>>::init_fungible_token(*collection_id, &T::CrossAccountId::from_sub(account_id.clone()), fungible_item);
             }
 
             for (_num, _c, _i) in &config.refungible_item_id {
@@ -334,7 +384,8 @@
 decl_event!(
     pub enum Event<T>
     where
-        AccountId = <T as system::Config>::AccountId,
+        AccountId = <T as frame_system::Config>::AccountId,
+        CrossAccountId = <T as Config>::CrossAccountId,
     {
         /// New collection was created
         /// 
@@ -356,7 +407,7 @@
         /// * item_id: Id of an item. Unique within the collection.
         ///
         /// * recipient: Owner of newly created item 
-        ItemCreated(CollectionId, TokenId, AccountId),
+        ItemCreated(CollectionId, TokenId, CrossAccountId),
 
         /// Collection item was burned.
         /// 
@@ -378,7 +429,7 @@
         /// * recipient: New owner of item
         ///
         /// * amount: Always 1 for NFT
-        Transfer(CollectionId, TokenId, AccountId, AccountId, u128),
+        Transfer(CollectionId, TokenId, CrossAccountId, CrossAccountId, u128),
 
         /// * collection_id
         ///
@@ -389,7 +440,7 @@
         /// * spender
         ///
         /// * amount
-        Approved(CollectionId, TokenId, AccountId, AccountId, u128),
+        Approved(CollectionId, TokenId, CrossAccountId, CrossAccountId, u128),
     }
 );
 
@@ -498,7 +549,7 @@
             <CollectionById<T>>::insert(next_id, new_collection);
 
             // call event
-            Self::deposit_event(RawEvent::CollectionCreated(next_id, mode.into(), who.clone()));
+            Self::deposit_event(RawEvent::CollectionCreated(next_id, mode.into(), who));
 
             Ok(())
         }
@@ -518,7 +569,7 @@
 
             let sender = ensure_signed(origin)?;
             let collection = Self::get_collection(collection_id)?;
-            Self::check_owner_permissions(&collection, sender)?;
+            Self::check_owner_permissions(&collection, &sender)?;
             if !collection.limits.owner_can_destroy {
                 fail!(Error::<T>::NoPermission);
             }
@@ -562,9 +613,9 @@
         /// * address.
         #[weight = <T as Config>::WeightInfo::add_to_white_list()]
         #[transactional]
-        pub fn add_to_white_list(origin, collection_id: CollectionId, address: T::AccountId) -> DispatchResult{
+        pub fn add_to_white_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{
 
-            let sender = ensure_signed(origin)?;
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
             let collection = Self::get_collection(collection_id)?;
 
             Self::toggle_white_list_internal(
@@ -591,9 +642,9 @@
         /// * address.
         #[weight = <T as Config>::WeightInfo::remove_from_white_list()]
         #[transactional]
-        pub fn remove_from_white_list(origin, collection_id: CollectionId, address: T::AccountId) -> DispatchResult{
+        pub fn remove_from_white_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{
 
-            let sender = ensure_signed(origin)?;
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
             let collection = Self::get_collection(collection_id)?;
 
             Self::toggle_white_list_internal(
@@ -624,7 +675,7 @@
             let sender = ensure_signed(origin)?;
 
             let mut target_collection = Self::get_collection(collection_id)?;
-            Self::check_owner_permissions(&target_collection, sender)?;
+            Self::check_owner_permissions(&target_collection, &sender)?;
             target_collection.access = mode;
             Self::save_collection(target_collection);
 
@@ -651,7 +702,7 @@
             let sender = ensure_signed(origin)?;
 
             let mut target_collection = Self::get_collection(collection_id)?;
-            Self::check_owner_permissions(&target_collection, sender)?;
+            Self::check_owner_permissions(&target_collection, &sender)?;
             target_collection.mint_mode = mint_permission;
             Self::save_collection(target_collection);
 
@@ -675,7 +726,7 @@
 
             let sender = ensure_signed(origin)?;
             let mut target_collection = Self::get_collection(collection_id)?;
-            Self::check_owner_permissions(&target_collection, sender)?;
+            Self::check_owner_permissions(&target_collection, &sender)?;
             target_collection.owner = new_owner;
             Self::save_collection(target_collection);
 
@@ -697,11 +748,10 @@
         /// * new_admin_id: Address of new admin to add.
         #[weight = <T as Config>::WeightInfo::add_collection_admin()]
         #[transactional]
-        pub fn add_collection_admin(origin, collection_id: CollectionId, new_admin_id: T::AccountId) -> DispatchResult {
-
-            let sender = ensure_signed(origin)?;
+        pub fn add_collection_admin(origin, collection_id: CollectionId, new_admin_id: T::CrossAccountId) -> DispatchResult {
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
             let collection = Self::get_collection(collection_id)?;
-            Self::check_owner_or_admin_permissions(&collection, sender)?;
+            Self::check_owner_or_admin_permissions(&collection, &sender)?;
             let mut admin_arr = <AdminList<T>>::get(collection_id);
 
             match admin_arr.binary_search(&new_admin_id) {
@@ -730,11 +780,10 @@
         /// * account_id: Address of admin to remove.
         #[weight = <T as Config>::WeightInfo::remove_collection_admin()]
         #[transactional]
-        pub fn remove_collection_admin(origin, collection_id: CollectionId, account_id: T::AccountId) -> DispatchResult {
-
-            let sender = ensure_signed(origin)?;
+        pub fn remove_collection_admin(origin, collection_id: CollectionId, account_id: T::CrossAccountId) -> DispatchResult {
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
             let collection = Self::get_collection(collection_id)?;
-            Self::check_owner_or_admin_permissions(&collection, sender)?;
+            Self::check_owner_or_admin_permissions(&collection, &sender)?;
             let mut admin_arr = <AdminList<T>>::get(collection_id);
 
             match admin_arr.binary_search(&account_id) {
@@ -759,10 +808,9 @@
         #[weight = <T as Config>::WeightInfo::set_collection_sponsor()]
         #[transactional]
         pub fn set_collection_sponsor(origin, collection_id: CollectionId, new_sponsor: T::AccountId) -> DispatchResult {
-
             let sender = ensure_signed(origin)?;
             let mut target_collection = Self::get_collection(collection_id)?;
-            Self::check_owner_permissions(&target_collection, sender)?;
+            Self::check_owner_permissions(&target_collection, &sender)?;
 
             target_collection.sponsorship = SponsorshipState::Unconfirmed(new_sponsor);
             Self::save_collection(target_collection);
@@ -780,7 +828,6 @@
         #[weight = <T as Config>::WeightInfo::confirm_sponsorship()]
         #[transactional]
         pub fn confirm_sponsorship(origin, collection_id: CollectionId) -> DispatchResult {
-
             let sender = ensure_signed(origin)?;
 
             let mut target_collection = Self::get_collection(collection_id)?;
@@ -807,11 +854,10 @@
         #[weight = <T as Config>::WeightInfo::remove_collection_sponsor()]
         #[transactional]
         pub fn remove_collection_sponsor(origin, collection_id: CollectionId) -> DispatchResult {
-
             let sender = ensure_signed(origin)?;
 
             let mut target_collection = Self::get_collection(collection_id)?;
-            Self::check_owner_permissions(&target_collection, sender)?;
+            Self::check_owner_permissions(&target_collection, &sender)?;
 
             target_collection.sponsorship = SponsorshipState::Disabled;
             Self::save_collection(target_collection);
@@ -845,9 +891,14 @@
 
         #[weight = <T as Config>::WeightInfo::create_item(data.len())]
         #[transactional]
-        pub fn create_item(origin, collection_id: CollectionId, owner: T::AccountId, data: CreateItemData) -> DispatchResult {
-            let sender = ensure_signed(origin)?;
-            Self::create_item_internal(sender, collection_id, owner, data)
+        pub fn create_item(origin, collection_id: CollectionId, owner: T::CrossAccountId, data: CreateItemData) -> DispatchResult {
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
+            let collection = Self::get_collection(collection_id)?;
+
+            Self::create_item_internal(&sender, &collection, &owner, data)?;
+
+            Self::submit_logs(collection)?;
+            Ok(())
         }
 
         /// This method creates multiple items in a collection created with CreateCollection method.
@@ -872,22 +923,15 @@
                                .map(|data| { data.len() })
                                .sum())]
         #[transactional]
-        pub fn create_multiple_items(origin, collection_id: CollectionId, owner: T::AccountId, items_data: Vec<CreateItemData>) -> DispatchResult {
+        pub fn create_multiple_items(origin, collection_id: CollectionId, owner: T::CrossAccountId, items_data: Vec<CreateItemData>) -> DispatchResult {
 
             ensure!(items_data.len() > 0, Error::<T>::EmptyArgument);
-            let sender = ensure_signed(origin)?;
-
-            let target_collection = Self::get_collection(collection_id)?;
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
+            let collection = Self::get_collection(collection_id)?;
 
-            Self::can_create_items_in_collection(&target_collection, &sender, &owner, items_data.len() as u32)?;
+            Self::create_multiple_items_internal(&sender, &collection, &owner, items_data)?;
 
-            for data in &items_data {
-                Self::validate_create_item_args(&target_collection, data)?;
-            }
-            for data in &items_data {
-                Self::create_item_no_validation(&target_collection, owner.clone(), data.clone())?;
-            }
-
+            Self::submit_logs(collection)?;
             Ok(())
         }
 
@@ -907,35 +951,13 @@
         #[weight = <T as Config>::WeightInfo::burn_item()]
         #[transactional]
         pub fn burn_item(origin, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult {
-
-            let sender = ensure_signed(origin)?;
 
-            // Transfer permissions check
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
             let target_collection = Self::get_collection(collection_id)?;
-            ensure!(
-                Self::is_item_owner(sender.clone(), &target_collection, item_id) ||
-                (
-                    target_collection.limits.owner_can_transfer &&
-                    Self::is_owner_or_admin_permissions(&target_collection, sender.clone())
-                ),
-                Error::<T>::NoPermission
-            );
 
-            if target_collection.access == AccessMode::WhiteList {
-                Self::check_white_list(&target_collection, &sender)?;
-            }
+            Self::burn_item_internal(&sender, &target_collection, item_id, value)?;
 
-            match target_collection.mode
-            {
-                CollectionMode::NFT => Self::burn_nft_item(&target_collection, item_id)?,
-                CollectionMode::Fungible(_)  => Self::burn_fungible_item(&sender, &target_collection, value)?,
-                CollectionMode::ReFungible  => Self::burn_refungible_item(&target_collection, item_id, &sender)?,
-                _ => ()
-            };
-
-            // call event
-            Self::deposit_event(RawEvent::ItemDestroyed(target_collection.id, item_id));
-
+            Self::submit_logs(target_collection)?;
             Ok(())
         }
 
@@ -964,11 +986,14 @@
         ///     * Re-Fungible Mode: Must specify transferred portion (between 0 and 1)
         #[weight = <T as Config>::WeightInfo::transfer()]
         #[transactional]
-        pub fn transfer(origin, recipient: T::AccountId, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult {
-            let sender = ensure_signed(origin)?;
+        pub fn transfer(origin, recipient: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult {
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
             let collection = Self::get_collection(collection_id)?;
 
-            Self::transfer_internal(sender, recipient, &collection, item_id, value)
+            Self::transfer_internal(&sender, &recipient, &collection, item_id, value)?;
+
+            Self::submit_logs(collection)?;
+            Ok(())
         }
 
         /// Set, change, or remove approved address to transfer the ownership of the NFT.
@@ -988,13 +1013,13 @@
         /// * item_id: ID of the item.
         #[weight = <T as Config>::WeightInfo::approve()]
         #[transactional]
-        pub fn approve(origin, spender: T::AccountId, collection_id: CollectionId, item_id: TokenId, amount: u128) -> DispatchResult {
-
-            let sender = ensure_signed(origin)?;
+        pub fn approve(origin, spender: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, amount: u128) -> DispatchResult {
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
             let collection = Self::get_collection(collection_id)?;
 
-            Self::approve_internal(sender, spender, &collection, item_id, amount)?;
+            Self::approve_internal(&sender, &spender, &collection, item_id, amount)?;
 
+            Self::submit_logs(collection)?;
             Ok(())
         }
         
@@ -1019,19 +1044,16 @@
         /// * value: Amount to transfer.
         #[weight = <T as Config>::WeightInfo::transfer_from()]
         #[transactional]
-        pub fn transfer_from(origin, from: T::AccountId, recipient: T::AccountId, collection_id: CollectionId, item_id: TokenId, value: u128 ) -> DispatchResult {
-
-            let sender = ensure_signed(origin)?;
+        pub fn transfer_from(origin, from: T::CrossAccountId, recipient: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, value: u128 ) -> DispatchResult {
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
             let collection = Self::get_collection(collection_id)?;
 
-            Self::transfer_from_internal(sender, from, recipient, &collection, item_id, value)?;
+            Self::transfer_from_internal(&sender, &from, &recipient, &collection, item_id, value)?;
 
+            Self::submit_logs(collection)?;
             Ok(())
         }
-
         // #[weight = 0]
-        // pub fn safe_transfer_from(origin, collection_id: CollectionId, item_id: TokenId, new_owner: T::AccountId) -> DispatchResult {
-
         //     // let no_perm_mes = "You do not have permissions to modify this collection";
         //     // ensure!(<ApprovedList<T>>::contains_key((collection_id, item_id)), no_perm_mes);
         //     // let list_itm = <ApprovedList<T>>::get((collection_id, item_id));
@@ -1064,11 +1086,11 @@
             item_id: TokenId,
             data: Vec<u8>
         ) -> DispatchResult {
-            let sender = ensure_signed(origin)?;
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
             
             let collection = Self::get_collection(collection_id)?;
 
-            Self::set_variable_meta_data_internal(sender, &collection, item_id, data)?;
+            Self::set_variable_meta_data_internal(&sender, &collection, item_id, data)?;
 
             Ok(())
         }
@@ -1094,9 +1116,9 @@
             collection_id: CollectionId,
             version: SchemaVersion
         ) -> DispatchResult {
-            let sender = ensure_signed(origin)?;
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
             let mut target_collection = Self::get_collection(collection_id)?;
-            Self::check_owner_or_admin_permissions(&target_collection, sender.clone())?;
+            Self::check_owner_or_admin_permissions(&target_collection, &sender)?;
             target_collection.schema_version = version;
             Self::save_collection(target_collection);
 
@@ -1122,9 +1144,9 @@
             collection_id: CollectionId,
             schema: Vec<u8>
         ) -> DispatchResult {
-            let sender = ensure_signed(origin)?;
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
             let mut target_collection = Self::get_collection(collection_id)?;
-            Self::check_owner_or_admin_permissions(&target_collection, sender.clone())?;
+            Self::check_owner_or_admin_permissions(&target_collection, &sender)?;
 
             // check schema limit
             ensure!(schema.len() as u32 <= ChainLimit::get().offchain_schema_limit, "");
@@ -1154,9 +1176,9 @@
             collection_id: CollectionId,
             schema: Vec<u8>
         ) -> DispatchResult {
-            let sender = ensure_signed(origin)?;
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
             let mut target_collection = Self::get_collection(collection_id)?;
-            Self::check_owner_or_admin_permissions(&target_collection, sender.clone())?;
+            Self::check_owner_or_admin_permissions(&target_collection, &sender)?;
 
             // check schema limit
             ensure!(schema.len() as u32 <= ChainLimit::get().const_on_chain_schema_limit, "");
@@ -1186,9 +1208,9 @@
             collection_id: CollectionId,
             schema: Vec<u8>
         ) -> DispatchResult {
-            let sender = ensure_signed(origin)?;
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
             let mut target_collection = Self::get_collection(collection_id)?;
-            Self::check_owner_or_admin_permissions(&target_collection, sender.clone())?;
+            Self::check_owner_or_admin_permissions(&target_collection, &sender)?;
 
             // check schema limit
             ensure!(schema.len() as u32 <= ChainLimit::get().variable_on_chain_schema_limit, "");
@@ -1373,9 +1395,9 @@
             collection_id: u32,
             new_limits: CollectionLimits<T::BlockNumber>,
         ) -> DispatchResult {
-            let sender = ensure_signed(origin)?;
+            let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
             let mut target_collection = Self::get_collection(collection_id)?;
-            Self::check_owner_permissions(&target_collection, sender.clone())?;
+            Self::check_owner_permissions(&target_collection, &sender.as_sub())?;
             let old_limits = &target_collection.limits;
             let chain_limits = ChainLimit::get();
 
@@ -1404,23 +1426,22 @@
 }
 
 impl<T: Config> Module<T> {
-    pub fn create_item_internal(sender: T::AccountId, collection_id: CollectionId, owner: T::AccountId, data: CreateItemData) -> DispatchResult {
-        let target_collection = Self::get_collection(collection_id)?;
-
-        Self::can_create_items_in_collection(&target_collection, &sender, &owner, 1)?;
-        Self::validate_create_item_args(&target_collection, &data)?;
-        Self::create_item_no_validation(&target_collection, owner, data)?;
+    pub fn create_item_internal(sender: &T::CrossAccountId, collection: &CollectionHandle<T>, owner: &T::CrossAccountId, data: CreateItemData) -> DispatchResult {
+        Self::can_create_items_in_collection(&collection, &sender, &owner, 1)?;
+        Self::validate_create_item_args(&collection, &data)?;
+        Self::create_item_no_validation(&collection, owner, data)?;
 
         Ok(())
     }
 
-    pub fn transfer_internal(sender: T::AccountId, recipient: T::AccountId, target_collection: &CollectionHandle<T>, item_id: TokenId, value: u128) -> DispatchResult {
+    pub fn transfer_internal(sender: &T::CrossAccountId, recipient: &T::CrossAccountId, target_collection: &CollectionHandle<T>, item_id: TokenId, value: u128) -> DispatchResult {
+        target_collection.consume_gas(2000000)?;
         // Limits check
         Self::is_correct_transfer(target_collection, &recipient)?;
 
         // Transfer permissions check
-        ensure!(Self::is_item_owner(sender.clone(), target_collection, item_id) ||
-            Self::is_owner_or_admin_permissions(target_collection, sender.clone()),
+        ensure!(Self::is_item_owner(&sender, target_collection, item_id) ||
+            Self::is_owner_or_admin_permissions(target_collection, &sender),
             Error::<T>::NoPermission);
 
         if target_collection.access == AccessMode::WhiteList {
@@ -1436,31 +1457,32 @@
             _ => ()
         };
 
-        Self::deposit_event(RawEvent::Transfer(target_collection.id, item_id, sender, recipient, value));
+        Self::deposit_event(RawEvent::Transfer(target_collection.id, item_id, sender.clone(), recipient.clone(), value));
 
         Ok(())
     }
 
 	pub fn approve_internal(
-		sender: T::AccountId,
-		spender: T::AccountId,
+		sender: &T::CrossAccountId,
+		spender: &T::CrossAccountId,
 		collection: &CollectionHandle<T>,
 		item_id: TokenId,
-		amount: u128,
+		amount: u128
 	) -> DispatchResult {
+        collection.consume_gas(2000000)?;
 		Self::token_exists(&collection, item_id)?;
 
 		// Transfer permissions check
 		let bypasses_limits = collection.limits.owner_can_transfer &&
 			Self::is_owner_or_admin_permissions(
 				&collection,
-				sender.clone(),
+				&sender,
 			);
 
 		let allowance_limit = if bypasses_limits {
 			None
 		} else if let Some(amount) = Self::owned_amount(
-			sender.clone(),
+			&sender,
 			&collection,
 			item_id,
 		) {
@@ -1475,27 +1497,46 @@
 		}
 
 		let allowance: u128 = amount
-			.checked_add(<Allowances<T>>::get(collection.id, (item_id, &sender, &spender)))
+			.checked_add(<Allowances<T>>::get(collection.id, (item_id, sender.as_sub(), spender.as_sub())))
 			.ok_or(Error::<T>::NumOverflow)?;
 		if let Some(limit) = allowance_limit {
 			ensure!(limit >= allowance, Error::<T>::TokenValueTooLow);
 		}
-		<Allowances<T>>::insert(collection.id, (item_id, &sender, &spender), allowance);
+		<Allowances<T>>::insert(collection.id, (item_id, sender.as_sub(), spender.as_sub()), allowance);
+
+		if matches!(collection.mode, CollectionMode::NFT) {
+			// TODO: NFT: only one owner may exist for token in ERC721
+			collection.log(ERC721Events::Approval {
+                owner: *sender.as_eth(),
+                approved: *spender.as_eth(),
+                token_id: item_id.into(),
+            });
+		}
+
+		if matches!(collection.mode, CollectionMode::Fungible(_)) {
+			// TODO: NFT: only one owner may exist for token in ERC20
+			collection.log(ERC20Events::Approval {
+                owner: *sender.as_eth(),
+                spender: *spender.as_eth(),
+                value: allowance.into()
+            });
+		}
 
-		Self::deposit_event(RawEvent::Approved(collection.id, item_id, sender, spender, allowance));
+		Self::deposit_event(RawEvent::Approved(collection.id, item_id, sender.clone(), spender.clone(), allowance));
 		Ok(())
 	}
 
 	pub fn transfer_from_internal(
-		sender: T::AccountId,
-		from: T::AccountId,
-		recipient: T::AccountId,
+		sender: &T::CrossAccountId,
+		from: &T::CrossAccountId,
+		recipient: &T::CrossAccountId,
 		collection: &CollectionHandle<T>,
 		item_id: TokenId,
 		amount: u128,
 	) -> DispatchResult {
+        collection.consume_gas(2000000)?;
 		// Check approval
-		let approval: u128 = <Allowances<T>>::get(collection.id, (item_id, &from, &sender));
+		let approval: u128 = <Allowances<T>>::get(collection.id, (item_id, from.as_sub(), sender.as_sub()));
 
 		// Limits check
 		Self::is_correct_transfer(&collection, &recipient)?;
@@ -1505,7 +1546,7 @@
 			approval >= amount || 
 			(
 				collection.limits.owner_can_transfer &&
-				Self::is_owner_or_admin_permissions(&collection, sender.clone())
+				Self::is_owner_or_admin_permissions(&collection, &sender)
 			),
 			Error::<T>::NoPermission
 		);
@@ -1518,9 +1559,9 @@
 		// Reduce approval by transferred amount or remove if remaining approval drops to 0
 		let allowance = approval.saturating_sub(amount);
 		if allowance > 0 {
-			<Allowances<T>>::insert(collection.id, (item_id, &from, &sender), allowance);
+			<Allowances<T>>::insert(collection.id, (item_id, from.as_sub(), sender.as_sub()), allowance);
 		} else {
-			<Allowances<T>>::remove(collection.id, (item_id, &from, &sender));
+			<Allowances<T>>::remove(collection.id, (item_id, from.as_sub(), sender.as_sub()));
 		}
 
 		match collection.mode {
@@ -1536,11 +1577,19 @@
 			_ => ()
 		};
 
+		if matches!(collection.mode, CollectionMode::Fungible(_)) {
+			collection.log(ERC20Events::Approval {
+                owner: *from.as_eth(),
+                spender: *sender.as_eth(),
+                value: allowance.into()
+            });
+		}
+
 		Ok(())
 	}
 
     pub fn set_variable_meta_data_internal(
-        sender: T::AccountId,
+        sender: &T::CrossAccountId,
         collection: &CollectionHandle<T>, 
         item_id: TokenId,
         data: Vec<u8>,
@@ -1550,8 +1599,8 @@
         ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::<T>::TokenVariableDataLimitExceeded);
 
         // Modify permissions check
-        ensure!(Self::is_item_owner(sender.clone(), &collection, item_id) ||
-            Self::is_owner_or_admin_permissions(&collection, sender.clone()),
+        ensure!(Self::is_item_owner(&sender, &collection, item_id) ||
+            Self::is_owner_or_admin_permissions(&collection, &sender),
             Error::<T>::NoPermission);
 
         match collection.mode
@@ -1566,9 +1615,9 @@
     }
 
     pub fn create_multiple_items_internal(
-        sender: T::AccountId,
+        sender: &T::CrossAccountId,
         collection: &CollectionHandle<T>,
-        owner: T::AccountId,
+        owner: &T::CrossAccountId,
         items_data: Vec<CreateItemData>,
     ) -> DispatchResult {
         Self::can_create_items_in_collection(&collection, &sender, &owner, items_data.len() as u32)?;
@@ -1577,53 +1626,83 @@
             Self::validate_create_item_args(&collection, data)?;
         }
         for data in &items_data {
-            Self::create_item_no_validation(&collection, owner.clone(), data.clone())?;
+            Self::create_item_no_validation(&collection, owner, data.clone())?;
         }
 
         Ok(())
     }
 
+    pub fn burn_item_internal(
+        sender: &T::CrossAccountId,
+        collection: &CollectionHandle<T>,
+        item_id: TokenId,
+        value: u128,
+    ) -> DispatchResult {
+        ensure!(
+            Self::is_item_owner(&sender, &collection, item_id) ||
+            (
+                collection.limits.owner_can_transfer &&
+                Self::is_owner_or_admin_permissions(&collection, &sender)
+            ),
+            Error::<T>::NoPermission
+        );
+
+        if collection.access == AccessMode::WhiteList {
+            Self::check_white_list(&collection, &sender)?;
+        }
+
+        match collection.mode
+        {
+            CollectionMode::NFT => Self::burn_nft_item(&collection, item_id)?,
+            CollectionMode::Fungible(_)  => Self::burn_fungible_item(&sender, &collection, value)?,
+            CollectionMode::ReFungible  => Self::burn_refungible_item(&collection, item_id, &sender)?,
+            _ => ()
+        };
+
+        Ok(())
+    }
+
     pub fn toggle_white_list_internal(
-        sender: &T::AccountId,
+        sender: &T::CrossAccountId,
         collection: &CollectionHandle<T>,
-        address: &T::AccountId,
+        address: &T::CrossAccountId,
         whitelisted: bool,
     ) -> DispatchResult {
-        Self::check_owner_or_admin_permissions(&collection, sender.clone())?;
+        Self::check_owner_or_admin_permissions(&collection, &sender)?;
 
         if whitelisted {
-            <WhiteList<T>>::insert(collection.id, address, true);
+            <WhiteList<T>>::insert(collection.id, address.as_sub(), true);
         } else {
-            <WhiteList<T>>::remove(collection.id, address);
+            <WhiteList<T>>::remove(collection.id, address.as_sub());
         }
 
         Ok(())
     }
 
-    fn is_correct_transfer(collection: &CollectionHandle<T>, recipient: &T::AccountId) -> DispatchResult {
+    fn is_correct_transfer(collection: &CollectionHandle<T>, recipient: &T::CrossAccountId) -> DispatchResult {
         let collection_id = collection.id;
 
         // check token limit and account token limit
-        let account_items: u32 = <AddressTokens<T>>::get(collection_id, recipient).len() as u32;
+        let account_items: u32 = <AddressTokens<T>>::get(collection_id, recipient.as_sub()).len() as u32;
         ensure!(collection.limits.account_token_ownership_limit > account_items,  Error::<T>::AccountTokenLimitExceeded);
         
         Ok(())
     }
 
-    fn can_create_items_in_collection(collection: &CollectionHandle<T>, sender: &T::AccountId, owner: &T::AccountId, amount: u32) -> DispatchResult {
+    fn can_create_items_in_collection(collection: &CollectionHandle<T>, sender: &T::CrossAccountId, owner: &T::CrossAccountId, amount: u32) -> DispatchResult {
         let collection_id = collection.id;
 
         // check token limit and account token limit
         let total_items: u32 = ItemListIndex::get(collection_id)
             .checked_add(amount)
             .ok_or(Error::<T>::CollectionTokenLimitExceeded)?;
-        let account_items: u32 = (<AddressTokens<T>>::get(collection_id, owner).len() as u32)
+        let account_items: u32 = (<AddressTokens<T>>::get(collection_id, owner.as_sub()).len() as u32)
             .checked_add(amount)
             .ok_or(Error::<T>::AccountTokenLimitExceeded)?;
         ensure!(collection.limits.token_limit >= total_items,  Error::<T>::CollectionTokenLimitExceeded);
         ensure!(collection.limits.account_token_ownership_limit >= account_items,  Error::<T>::AccountTokenLimitExceeded);
 
-        if !Self::is_owner_or_admin_permissions(collection, sender.clone()) {
+        if !Self::is_owner_or_admin_permissions(collection, &sender) {
             ensure!(collection.mint_mode == true, Error::<T>::PublicMintingNotAllowed);
             Self::check_white_list(collection, owner)?;
             Self::check_white_list(collection, sender)?;
@@ -1670,7 +1749,7 @@
         Ok(())
     }
 
-    fn create_item_no_validation(collection: &CollectionHandle<T>, owner: T::AccountId, data: CreateItemData) -> DispatchResult {
+    fn create_item_no_validation(collection: &CollectionHandle<T>, owner: &T::CrossAccountId, data: CreateItemData) -> DispatchResult {
         match data
         {
             CreateItemData::NFT(data) => {
@@ -1702,29 +1781,29 @@
         Ok(())
     }
 
-    fn add_fungible_item(collection: &CollectionHandle<T>, owner: &T::AccountId, value: u128) -> DispatchResult {
+    fn add_fungible_item(collection: &CollectionHandle<T>, owner: &T::CrossAccountId, value: u128) -> DispatchResult {
         let collection_id = collection.id;
 
         // Does new owner already have an account?
-        let balance: u128 = <FungibleItemList<T>>::get(collection_id, owner).value;
+        let balance: u128 = <FungibleItemList<T>>::get(collection_id, owner.as_sub()).value;
 
         // Mint 
         let item = FungibleItemType {
             value: balance.checked_add(value).ok_or(Error::<T>::NumOverflow)?,
         };
-        <FungibleItemList<T>>::insert(collection_id, (*owner).clone(), item);
+        <FungibleItemList<T>>::insert(collection_id, owner.as_sub(), item);
 
         // Update balance
-        let new_balance = <Balance<T>>::get(collection_id, owner)
+        let new_balance = <Balance<T>>::get(collection_id, owner.as_sub())
             .checked_add(value)
             .ok_or(Error::<T>::NumOverflow)?;
-        <Balance<T>>::insert(collection_id, (*owner).clone(), new_balance);
+        <Balance<T>>::insert(collection_id, owner.as_sub(), new_balance);
 
         Self::deposit_event(RawEvent::ItemCreated(collection_id, 0, owner.clone()));
         Ok(())
     }
 
-    fn add_refungible_item(collection: &CollectionHandle<T>, item: ReFungibleItemType<T::AccountId>) -> DispatchResult {
+    fn add_refungible_item(collection: &CollectionHandle<T>, item: ReFungibleItemType<T::CrossAccountId>) -> DispatchResult {
         let collection_id = collection.id;
 
         let current_index = <ItemListIndex>::get(collection_id)
@@ -1747,16 +1826,16 @@
         <ReFungibleItemList<T>>::insert(collection_id, current_index, itemcopy);
 
         // Update balance
-        let new_balance = <Balance<T>>::get(collection_id, &owner)
+        let new_balance = <Balance<T>>::get(collection_id, owner.as_sub())
             .checked_add(value)
             .ok_or(Error::<T>::NumOverflow)?;
-        <Balance<T>>::insert(collection_id, owner.clone(), new_balance);
+        <Balance<T>>::insert(collection_id, owner.as_sub(), new_balance);
 
         Self::deposit_event(RawEvent::ItemCreated(collection_id, current_index, owner));
         Ok(())
     }
 
-    fn add_nft_item(collection: &CollectionHandle<T>, item: NftItemType<T::AccountId>) -> DispatchResult {
+    fn add_nft_item(collection: &CollectionHandle<T>, item: NftItemType<T::CrossAccountId>) -> DispatchResult {
         let collection_id = collection.id;
 
         let current_index = <ItemListIndex>::get(collection_id)
@@ -1770,11 +1849,16 @@
         <NftItemList<T>>::insert(collection_id, current_index, item);
 
         // Update balance
-        let new_balance = <Balance<T>>::get(collection_id, item_owner.clone())
+        let new_balance = <Balance<T>>::get(collection_id, item_owner.as_sub())
             .checked_add(1)
             .ok_or(Error::<T>::NumOverflow)?;
-        <Balance<T>>::insert(collection_id, item_owner.clone(), new_balance);
+        <Balance<T>>::insert(collection_id, item_owner.as_sub(), new_balance);
 
+        collection.log(ERC721Events::Transfer {
+            from: H160::default(),
+            to: *item_owner.as_eth(),
+            token_id: current_index.into(),
+        });
         Self::deposit_event(RawEvent::ItemCreated(collection_id, current_index, item_owner));
         Ok(())
     }
@@ -1782,7 +1866,7 @@
     fn burn_refungible_item(
         collection: &CollectionHandle<T>,
         item_id: TokenId,
-        owner: &T::AccountId,
+        owner: &T::CrossAccountId,
     ) -> DispatchResult {
         let collection_id = collection.id;
 
@@ -1796,10 +1880,10 @@
         Self::remove_token_index(collection_id, item_id, owner)?;
 
         // update balance
-        let new_balance = <Balance<T>>::get(collection_id, rft_balance.owner.clone())
+        let new_balance = <Balance<T>>::get(collection_id, rft_balance.owner.as_sub())
             .checked_sub(rft_balance.fraction)
             .ok_or(Error::<T>::NumOverflow)?;
-        <Balance<T>>::insert(collection_id, rft_balance.owner.clone(), new_balance);
+        <Balance<T>>::insert(collection_id, rft_balance.owner.as_sub(), new_balance);
 
         // Re-create owners list with sender removed
         let index = token
@@ -1830,68 +1914,80 @@
         Self::remove_token_index(collection_id, item_id, &item.owner)?;
 
         // update balance
-        let new_balance = <Balance<T>>::get(collection_id, &item.owner)
+        let new_balance = <Balance<T>>::get(collection_id, item.owner.as_sub())
             .checked_sub(1)
             .ok_or(Error::<T>::NumOverflow)?;
-        <Balance<T>>::insert(collection_id, item.owner.clone(), new_balance);
+        <Balance<T>>::insert(collection_id, item.owner.as_sub(), new_balance);
         <NftItemList<T>>::remove(collection_id, item_id);
         <VariableMetaDataBasket<T>>::remove(collection_id, item_id);
 
+        Self::deposit_event(RawEvent::ItemDestroyed(collection.id, item_id));
         Ok(())
     }
 
-    fn burn_fungible_item(owner: &T::AccountId, collection: &CollectionHandle<T>, value: u128) -> DispatchResult {
+    fn burn_fungible_item(owner: &T::CrossAccountId, collection: &CollectionHandle<T>, value: u128) -> DispatchResult {
         let collection_id = collection.id;
 
-        let mut balance = <FungibleItemList<T>>::get(collection_id, owner);
+        let mut balance = <FungibleItemList<T>>::get(collection_id, owner.as_sub());
         ensure!(balance.value >= value, Error::<T>::TokenValueNotEnough);
 
         // update balance
-        let new_balance = <Balance<T>>::get(collection_id, owner)
+        let new_balance = <Balance<T>>::get(collection_id, owner.as_sub())
             .checked_sub(value)
             .ok_or(Error::<T>::NumOverflow)?;
-        <Balance<T>>::insert(collection_id, (*owner).clone(), new_balance);
+        <Balance<T>>::insert(collection_id, owner.as_sub(), new_balance);
 
         if balance.value - value > 0 {
             balance.value -= value;
-            <FungibleItemList<T>>::insert(collection_id, (*owner).clone(), balance);
+            <FungibleItemList<T>>::insert(collection_id, owner.as_sub(), balance);
         }
         else {
-            <FungibleItemList<T>>::remove(collection_id, owner);
+            <FungibleItemList<T>>::remove(collection_id, owner.as_sub());
         }
 
+        collection.log(ERC20Events::Transfer {
+            from: *owner.as_eth(),
+            to: H160::default(),
+            value: value.into(),
+        });
         Ok(())
     }
 
     pub fn get_collection(collection_id: CollectionId) -> Result<CollectionHandle<T>, sp_runtime::DispatchError> {
-        Ok(<CollectionById<T>>::get(collection_id)
-            .map(|collection| CollectionHandle {
-                id: collection_id,
-                collection
-            })
+        Ok(<CollectionHandle<T>>::get(collection_id)
             .ok_or(Error::<T>::CollectionNotFound)?)
     }
 
     fn save_collection(collection: CollectionHandle<T>) {
-        <CollectionById<T>>::insert(collection.id, collection.collection);
+        <CollectionById<T>>::insert(collection.id, collection.into_inner());
+    }
+
+    pub fn submit_logs(collection: CollectionHandle<T>) -> DispatchResult {
+        if collection.logs.is_empty() {
+            return Ok(())
+        }
+        T::EthereumTransactionSender::submit_logs_transaction(
+            eth::generate_transaction(collection.id, T::EthereumChainId::get()),
+            collection.logs.retrieve_logs(),
+        )
     }
 
-    fn check_owner_permissions(target_collection: &CollectionHandle<T>, subject: T::AccountId) -> DispatchResult {
+    fn check_owner_permissions(target_collection: &CollectionHandle<T>, subject: &T::AccountId) -> DispatchResult {
         ensure!(
-            subject == target_collection.owner,
+            *subject == target_collection.owner,
             Error::<T>::NoPermission
         );
 
         Ok(())
     }
 
-    fn is_owner_or_admin_permissions(collection: &CollectionHandle<T>, subject: T::AccountId) -> bool {
-        subject == collection.owner || <AdminList<T>>::get(collection.id).contains(&subject)
+    fn is_owner_or_admin_permissions(collection: &CollectionHandle<T>, subject: &T::CrossAccountId) -> bool {
+        *subject.as_sub() == collection.owner || <AdminList<T>>::get(collection.id).contains(&subject)
     }
 
     fn check_owner_or_admin_permissions(
         collection: &CollectionHandle<T>,
-        subject: T::AccountId,
+        subject: &T::CrossAccountId,
     ) -> DispatchResult {
         ensure!(Self::is_owner_or_admin_permissions(collection, subject), Error::<T>::NoPermission);
 
@@ -1899,38 +1995,38 @@
     }
 
     fn owned_amount(
-        subject: T::AccountId,
+        subject: &T::CrossAccountId,
         target_collection: &CollectionHandle<T>,
         item_id: TokenId,
     ) -> Option<u128> {
         let collection_id = target_collection.id;
 
         match target_collection.mode {
-            CollectionMode::NFT => (<NftItemList<T>>::get(collection_id, item_id)?.owner == subject)
+            CollectionMode::NFT => (<NftItemList<T>>::get(collection_id, item_id)?.owner == *subject)
                 .then(|| 1),
-            CollectionMode::Fungible(_) => Some(<FungibleItemList<T>>::get(collection_id, &subject)
+            CollectionMode::Fungible(_) => Some(<FungibleItemList<T>>::get(collection_id, &subject.as_sub())
                 .value),
             CollectionMode::ReFungible => <ReFungibleItemList<T>>::get(collection_id, item_id)?
                 .owner
                 .iter()
-                .find(|i| i.owner == subject)
+                .find(|i| i.owner == *subject)
                 .map(|i| i.fraction),
             CollectionMode::Invalid => None,
         }
     }
 
-    fn is_item_owner(subject: T::AccountId, target_collection: &CollectionHandle<T>, item_id: TokenId) -> bool {
+    fn is_item_owner(subject: &T::CrossAccountId, target_collection: &CollectionHandle<T>, item_id: TokenId) -> bool {
         match target_collection.mode {
             CollectionMode::Fungible(_) => true,
-            _ => Self::owned_amount(subject, target_collection, item_id).is_some(),
+            _ => Self::owned_amount(&subject, target_collection, item_id).is_some(),
         }
     }
 
-    fn check_white_list(collection: &CollectionHandle<T>, address: &T::AccountId) -> DispatchResult {
+    fn check_white_list(collection: &CollectionHandle<T>, address: &T::CrossAccountId) -> DispatchResult {
         let collection_id = collection.id;
 
         let mes = Error::<T>::AddresNotInWhiteList;
-        ensure!(<WhiteList<T>>::contains_key(collection_id, address), mes);
+        ensure!(<WhiteList<T>>::contains_key(collection_id, address.as_sub()), mes);
 
         Ok(())
     }
@@ -1957,29 +2053,36 @@
     fn transfer_fungible(
         collection: &CollectionHandle<T>,
         value: u128,
-        owner: &T::AccountId,
-        recipient: &T::AccountId,
+        owner: &T::CrossAccountId,
+        recipient: &T::CrossAccountId,
     ) -> DispatchResult {
         let collection_id = collection.id;
 
-        let mut balance = <FungibleItemList<T>>::get(collection_id, owner);
+        let mut balance = <FungibleItemList<T>>::get(collection_id, owner.as_sub());
         ensure!(balance.value >= value, Error::<T>::TokenValueTooLow);
 
         // Send balance to recipient (updates balanceOf of recipient)
         Self::add_fungible_item(collection, recipient, value)?;
 
         // update balanceOf of sender
-        <Balance<T>>::insert(collection_id, (*owner).clone(), balance.value - value);
+        <Balance<T>>::insert(collection_id, owner.as_sub(), balance.value - value);
 
         // Reduce or remove sender
         if balance.value == value {
-            <FungibleItemList<T>>::remove(collection_id, owner);
+            <FungibleItemList<T>>::remove(collection_id, owner.as_sub());
         }
         else {
             balance.value -= value;
-            <FungibleItemList<T>>::insert(collection_id, (*owner).clone(), balance);
+            <FungibleItemList<T>>::insert(collection_id, owner.as_sub(), balance);
         }
 
+        collection.log(ERC20Events::Transfer {
+            from: *owner.as_eth(),
+            to: *recipient.as_eth(),
+            value: value.into(),
+        });
+        Self::deposit_event(RawEvent::Transfer(collection.id, 1, owner.clone(), recipient.clone(), value));
+
         Ok(())
     }
 
@@ -1987,8 +2090,8 @@
         collection: &CollectionHandle<T>,
         item_id: TokenId,
         value: u128,
-        owner: T::AccountId,
-        new_owner: T::AccountId,
+        owner: T::CrossAccountId,
+        new_owner: T::CrossAccountId,
     ) -> DispatchResult {
         let collection_id = collection.id;
         let full_item = <ReFungibleItemList<T>>::get(collection_id, item_id)
@@ -2005,15 +2108,15 @@
         ensure!(amount >= value, Error::<T>::TokenValueTooLow);
 
         // update balance
-        let balance_old_owner = <Balance<T>>::get(collection_id, item.owner.clone())
+        let balance_old_owner = <Balance<T>>::get(collection_id, item.owner.as_sub())
             .checked_sub(value)
             .ok_or(Error::<T>::NumOverflow)?;
-        <Balance<T>>::insert(collection_id, item.owner.clone(), balance_old_owner);
+        <Balance<T>>::insert(collection_id, item.owner.as_sub(), balance_old_owner);
 
-        let balance_new_owner = <Balance<T>>::get(collection_id, new_owner.clone())
+        let balance_new_owner = <Balance<T>>::get(collection_id, new_owner.as_sub())
             .checked_add(value)
             .ok_or(Error::<T>::NumOverflow)?;
-        <Balance<T>>::insert(collection_id, new_owner.clone(), balance_new_owner);
+        <Balance<T>>::insert(collection_id, new_owner.as_sub(), balance_new_owner);
 
         let old_owner = item.owner.clone();
         let new_owner_has_account = full_item.owner.iter().any(|i| i.owner == new_owner);
@@ -2063,14 +2166,16 @@
             <ReFungibleItemList<T>>::insert(collection_id, item_id, new_full_item);
         }
 
+        Self::deposit_event(RawEvent::Transfer(collection.id, item_id, owner, new_owner, amount));
+
         Ok(())
     }
 
     fn transfer_nft(
         collection: &CollectionHandle<T>,
         item_id: TokenId,
-        sender: T::AccountId,
-        new_owner: T::AccountId,
+        sender: T::CrossAccountId,
+        new_owner: T::CrossAccountId,
     ) -> DispatchResult {
         let collection_id = collection.id;
         let mut item = <NftItemList<T>>::get(collection_id, item_id)
@@ -2082,15 +2187,15 @@
         );
 
         // update balance
-        let balance_old_owner = <Balance<T>>::get(collection_id, item.owner.clone())
+        let balance_old_owner = <Balance<T>>::get(collection_id, item.owner.as_sub())
             .checked_sub(1)
             .ok_or(Error::<T>::NumOverflow)?;
-        <Balance<T>>::insert(collection_id, item.owner.clone(), balance_old_owner);
+        <Balance<T>>::insert(collection_id, item.owner.as_sub(), balance_old_owner);
 
-        let balancenew_owner = <Balance<T>>::get(collection_id, new_owner.clone())
+        let balance_new_owner = <Balance<T>>::get(collection_id, new_owner.as_sub())
             .checked_add(1)
             .ok_or(Error::<T>::NumOverflow)?;
-        <Balance<T>>::insert(collection_id, new_owner.clone(), balancenew_owner);
+        <Balance<T>>::insert(collection_id, new_owner.as_sub(), balance_new_owner);
 
         // change owner
         let old_owner = item.owner.clone();
@@ -2100,6 +2205,13 @@
         // update index collection
         Self::move_token_index(collection_id, item_id, &old_owner, &new_owner)?;
 
+        collection.log(ERC721Events::Transfer {
+            from: *sender.as_eth(),
+            to: *new_owner.as_eth(),
+            token_id: item_id.into(),
+        });
+        Self::deposit_event(RawEvent::Transfer(collection.id, item_id, sender, new_owner, 1));
+
         Ok(())
     }
     
@@ -2164,25 +2276,24 @@
     }
 
     #[allow(dead_code)]
-    fn init_nft_token(collection_id: CollectionId, item: &NftItemType<T::AccountId>) {
+    fn init_nft_token(collection_id: CollectionId, item: &NftItemType<T::CrossAccountId>) {
         let current_index = <ItemListIndex>::get(collection_id)
             .checked_add(1)
             .unwrap();
 
-        let item_owner = item.owner.clone();
         Self::add_token_index(collection_id, current_index, &item.owner).unwrap();
 
         <ItemListIndex>::insert(collection_id, current_index);
 
         // Update balance
-        let new_balance = <Balance<T>>::get(collection_id, &item_owner)
+        let new_balance = <Balance<T>>::get(collection_id, item.owner.as_sub())
             .checked_add(1)
             .unwrap();
-        <Balance<T>>::insert(collection_id, item_owner.clone(), new_balance);
+        <Balance<T>>::insert(collection_id, item.owner.as_sub(), new_balance);
     }
 
     #[allow(dead_code)]
-    fn init_fungible_token(collection_id: CollectionId, owner: &T::AccountId, item: &FungibleItemType) {
+    fn init_fungible_token(collection_id: CollectionId, owner: &T::CrossAccountId, item: &FungibleItemType) {
         let current_index = <ItemListIndex>::get(collection_id)
             .checked_add(1)
             .unwrap();
@@ -2192,14 +2303,14 @@
         <ItemListIndex>::insert(collection_id, current_index);
 
         // Update balance
-        let new_balance = <Balance<T>>::get(collection_id, owner)
+        let new_balance = <Balance<T>>::get(collection_id, owner.as_sub())
             .checked_add(item.value)
             .unwrap();
-        <Balance<T>>::insert(collection_id, (*owner).clone(), new_balance);
+        <Balance<T>>::insert(collection_id, owner.as_sub(), new_balance);
     }
 
     #[allow(dead_code)]
-    fn init_refungible_token(collection_id: CollectionId, item: &ReFungibleItemType<T::AccountId>) {
+    fn init_refungible_token(collection_id: CollectionId, item: &ReFungibleItemType<T::CrossAccountId>) {
         let current_index = <ItemListIndex>::get(collection_id)
             .checked_add(1)
             .unwrap();
@@ -2212,42 +2323,42 @@
         <ItemListIndex>::insert(collection_id, current_index);
 
         // Update balance
-        let new_balance = <Balance<T>>::get(collection_id, &owner)
+        let new_balance = <Balance<T>>::get(collection_id, &owner.as_sub())
             .checked_add(value)
             .unwrap();
-        <Balance<T>>::insert(collection_id, owner.clone(), new_balance);
+        <Balance<T>>::insert(collection_id, owner.as_sub(), new_balance);
     }
 
-    fn add_token_index(collection_id: CollectionId, item_index: TokenId, owner: &T::AccountId) -> DispatchResult {
+    fn add_token_index(collection_id: CollectionId, item_index: TokenId, owner: &T::CrossAccountId) -> DispatchResult {
         // add to account limit
-        if <AccountItemCount<T>>::contains_key(owner) {
+        if <AccountItemCount<T>>::contains_key(owner.as_sub()) {
 
             // bound Owned tokens by a single address
-            let count = <AccountItemCount<T>>::get(owner);
+            let count = <AccountItemCount<T>>::get(owner.as_sub());
             ensure!(count < ChainLimit::get().account_token_ownership_limit, Error::<T>::AddressOwnershipLimitExceeded);
 
-            <AccountItemCount<T>>::insert(owner.clone(), count
+            <AccountItemCount<T>>::insert(owner.as_sub(), count
                 .checked_add(1)
                 .ok_or(Error::<T>::NumOverflow)?);
         }
         else {
-            <AccountItemCount<T>>::insert(owner.clone(), 1);
+            <AccountItemCount<T>>::insert(owner.as_sub(), 1);
         }
 
-        let list_exists = <AddressTokens<T>>::contains_key(collection_id, owner);
+        let list_exists = <AddressTokens<T>>::contains_key(collection_id, owner.as_sub());
         if list_exists {
-            let mut list = <AddressTokens<T>>::get(collection_id, owner);
+            let mut list = <AddressTokens<T>>::get(collection_id, owner.as_sub());
             let item_contains = list.contains(&item_index.clone());
 
             if !item_contains {
                 list.push(item_index.clone());
             }
 
-            <AddressTokens<T>>::insert(collection_id, owner.clone(), list);
+            <AddressTokens<T>>::insert(collection_id, owner.as_sub(), list);
         } else {
             let mut itm = Vec::new();
             itm.push(item_index.clone());
-            <AddressTokens<T>>::insert(collection_id, owner.clone(), itm);
+            <AddressTokens<T>>::insert(collection_id, owner.as_sub(), itm);
         }
 
         Ok(())
@@ -2256,24 +2367,24 @@
     fn remove_token_index(
         collection_id: CollectionId,
         item_index: TokenId,
-        owner: &T::AccountId,
+        owner: &T::CrossAccountId,
     ) -> DispatchResult {
 
         // update counter
-        <AccountItemCount<T>>::insert(owner.clone(), 
-            <AccountItemCount<T>>::get(owner)
+        <AccountItemCount<T>>::insert(owner.as_sub(), 
+            <AccountItemCount<T>>::get(owner.as_sub())
             .checked_sub(1)
             .ok_or(Error::<T>::NumOverflow)?);
 
 
-        let list_exists = <AddressTokens<T>>::contains_key(collection_id, owner);
+        let list_exists = <AddressTokens<T>>::contains_key(collection_id, owner.as_sub());
         if list_exists {
-            let mut list = <AddressTokens<T>>::get(collection_id, owner);
+            let mut list = <AddressTokens<T>>::get(collection_id, owner.as_sub());
             let item_contains = list.contains(&item_index.clone());
 
             if item_contains {
                 list.retain(|&item| item != item_index);
-                <AddressTokens<T>>::insert(collection_id, owner.clone(), list);
+                <AddressTokens<T>>::insert(collection_id, owner.as_sub(), list);
             }
         }
 
@@ -2283,8 +2394,8 @@
     fn move_token_index(
         collection_id: CollectionId,
         item_index: TokenId,
-        old_owner: &T::AccountId,
-        new_owner: &T::AccountId,
+        old_owner: &T::CrossAccountId,
+        new_owner: &T::CrossAccountId,
     ) -> DispatchResult {
         Self::remove_token_index(collection_id, item_index, old_owner)?;
         Self::add_token_index(collection_id, item_index, new_owner)?;
@@ -2298,3 +2409,10 @@
         Ok(())
     }
 }
+
+sp_api::decl_runtime_apis! {
+    pub trait NftApi {
+        /// Used for ethereum integration
+        fn eth_contract_code(account: H160) -> Option<Vec<u8>>;
+    }
+}
\ No newline at end of file
modifiedpallets/scheduler/Cargo.tomldiffbeforeafterboth
--- a/pallets/scheduler/Cargo.toml
+++ b/pallets/scheduler/Cargo.toml
@@ -10,7 +10,7 @@
 readme = "README.md"
 
 [dependencies]
-serde = { version = "1.0.119" }
+serde = { version = "1.0.119", default-features = false }
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false }
 frame-support = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
 frame-system = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
modifiedprimitives/Cargo.tomldiffbeforeafterboth
--- a/primitives/Cargo.toml
+++ b/primitives/Cargo.toml
@@ -10,7 +10,7 @@
 
 [dependencies]
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ['derive'] }
-serde = { version = "1.0.119", optional = true, features = ['derive'] }
+serde = { version = "1.0.119", features = ['derive'], default-features = false }
 frame-support = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
 frame-system = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
 pallet-contracts = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.3' }
@@ -20,7 +20,7 @@
 [features]
 default = ["std"]
 std = [
-  "serde",
+  "serde/std",
   "codec/std",
   "frame-system/std",
   "frame-support/std",
modifiedprimitives/src/lib.rsdiffbeforeafterboth
--- a/primitives/src/lib.rs
+++ b/primitives/src/lib.rs
@@ -1,8 +1,7 @@
 
 #![cfg_attr(not(feature = "std"), no_std)]
 
-#[cfg(feature = "std")]
-pub use serde::*;
+pub use serde::{Serialize, Deserialize};
 
 use frame_system;
 use sp_runtime::sp_std::prelude::Vec;
modifiedruntime/Cargo.tomldiffbeforeafterboth
--- a/runtime/Cargo.toml
+++ b/runtime/Cargo.toml
@@ -53,6 +53,9 @@
     'pallet-transaction-payment-rpc-runtime-api/std',
     'pallet-treasury/std',
     'pallet-vesting/std',
+    'pallet-evm/std',
+    'pallet-ethereum/std',
+    'fp-rpc/std',
 	'parachain-info/std',
     'serde',
     'pallet-inflation/std',
@@ -130,6 +133,7 @@
 version = '0.3.1'
 
 [dependencies.serde]
+default-features = false
 features = ['derive']
 optional = true
 version = '1.0.119'
@@ -373,9 +377,12 @@
 pallet-nft-transaction-payment = { path = '../pallets/nft-transaction-payment', default-features = false, version = '3.0.0' }
 pallet-nft-charge-transaction = { path = '../pallets/nft-charge-transaction', default-features = false, version = '3.0.0' }
 
+pallet-evm = { default-features = false, version = "4.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+pallet-ethereum = { default-features = false, version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+fp-rpc = { default-features = false, version = "2.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }
+
 ################################################################################
 # Build Dependencies
 
 [build-dependencies]
-substrate-wasm-builder = '4.0.0'
-
+substrate-wasm-builder = '4.0.0'
\ No newline at end of file
modifiedruntime/src/chain_extension.rsdiffbeforeafterboth
--- a/runtime/src/chain_extension.rs
+++ b/runtime/src/chain_extension.rs
@@ -17,6 +17,7 @@
 
 extern crate pallet_nft;
 pub use pallet_nft::*;
+use pallet_nft::CrossAccountId;
 use nft_data_structs::*;
 
 use crate::Vec;
@@ -98,13 +99,14 @@
                 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
 
                 pallet_nft::Module::<C>::transfer_internal(
-                    env.ext().address().clone(),
-                    input.recipient,
+                    &C::CrossAccountId::from_sub(env.ext().address().clone()),
+                    &C::CrossAccountId::from_sub(input.recipient),
                     &collection,
                     input.token_id,
                     input.amount,
                 )?;
-                
+
+                pallet_nft::Module::<C>::submit_logs(collection)?;
                 Ok(RetVal::Converging(0))
             },
             1 => {
@@ -113,13 +115,16 @@
                 let input: NFTExtCreateItem<E> = env.read_as()?;
                 env.charge_weight(NftWeightInfoOf::<C>::create_item(input.data.len()))?;
 
+                let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
+
                 pallet_nft::Module::<C>::create_item_internal(
-                    env.ext().address().clone(),
-                    input.collection_id,
-                    input.owner,
+                    &C::CrossAccountId::from_sub(env.ext().address().clone()),
+                    &collection,
+                    &C::CrossAccountId::from_sub(input.owner),
                     input.data,
                 )?;
-                
+
+                pallet_nft::Module::<C>::submit_logs(collection)?;
                 Ok(RetVal::Converging(0))
             },
             2 => {
@@ -135,12 +140,13 @@
                 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
 
                 pallet_nft::Module::<C>::create_multiple_items_internal(
-                    env.ext().address().clone(),
+                    &C::CrossAccountId::from_sub(env.ext().address().clone()),
                     &collection,
-                    input.owner,
+                    &C::CrossAccountId::from_sub(input.owner),
                     input.data,
                 )?;
-                
+
+                pallet_nft::Module::<C>::submit_logs(collection)?;
                 Ok(RetVal::Converging(0))
             },
             3 => {
@@ -152,13 +158,14 @@
                 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
 
                 pallet_nft::Module::<C>::approve_internal(
-                    env.ext().address().clone(),
-                    input.spender,
+                    &C::CrossAccountId::from_sub(env.ext().address().clone()),
+                    &C::CrossAccountId::from_sub(input.spender),
                     &collection,
                     input.item_id,
                     input.amount,
                 )?;
 
+                pallet_nft::Module::<C>::submit_logs(collection)?;
                 Ok(RetVal::Converging(0))
             },
             4 => {
@@ -170,14 +177,15 @@
                 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
 
                 pallet_nft::Module::<C>::transfer_from_internal(
-                    env.ext().address().clone(),
-                    input.owner,
-                    input.recipient,
+                    &C::CrossAccountId::from_sub(env.ext().address().clone()),
+                    &C::CrossAccountId::from_sub(input.owner),
+                    &C::CrossAccountId::from_sub(input.recipient),
                     &collection,
                     input.item_id,
                     input.amount
                 )?;
 
+                pallet_nft::Module::<C>::submit_logs(collection)?;
                 Ok(RetVal::Converging(0))
             },
             5 => {
@@ -189,12 +197,13 @@
                 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
 
                 pallet_nft::Module::<C>::set_variable_meta_data_internal(
-                    env.ext().address().clone(),
+                    &C::CrossAccountId::from_sub(env.ext().address().clone()),
                     &collection,
                     input.item_id,
                     input.data,
                 )?;
 
+                pallet_nft::Module::<C>::submit_logs(collection)?;
                 Ok(RetVal::Converging(0))
             },
             6 => {
@@ -206,12 +215,13 @@
                 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
 
                 pallet_nft::Module::<C>::toggle_white_list_internal(
-                    &env.ext().address().clone(),
+                    &C::CrossAccountId::from_sub(env.ext().address().clone()),
                     &collection,
-                    &input.address,
+                    &C::CrossAccountId::from_sub(input.address),
                     input.whitelisted,
                 )?;
 
+                pallet_nft::Module::<C>::submit_logs(collection)?;
                 Ok(RetVal::Converging(0))
             }
             _ => {
modifiedruntime/src/lib.rsdiffbeforeafterboth
--- a/runtime/src/lib.rs
+++ b/runtime/src/lib.rs
@@ -14,7 +14,7 @@
 include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));
 
 use sp_api::impl_runtime_apis;
-use sp_core::{ crypto::KeyTypeId, OpaqueMetadata };
+use sp_core::{ crypto::KeyTypeId, OpaqueMetadata, H256, U256, H160 };
 // #[cfg(any(feature = "std", test))]
 // pub use sp_runtime::BuildStorage;
 
@@ -37,6 +37,7 @@
 pub use pallet_transaction_payment::{Multiplier, TargetedFeeAdjustment, FeeDetails, RuntimeDispatchInfo};
 // A few exports that help ease life for downstream crates.
 pub use pallet_balances::Call as BalancesCall;
+pub use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping, Runner};
 pub use frame_support::{
     construct_runtime,
 	match_type,
@@ -44,8 +45,9 @@
 	PalletId,
     parameter_types,
     StorageValue,
+	ConsensusEngineId,
     traits::{
-        All, Currency, ExistenceRequirement, Get, IsInVec, KeyOwnerProofSystem, LockIdentifier, OnUnbalanced, Randomness
+        All, Currency, ExistenceRequirement, Get, IsInVec, KeyOwnerProofSystem, LockIdentifier, OnUnbalanced, Randomness, FindAuthor
     },
     weights::{
         constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},
@@ -63,7 +65,10 @@
 };
 use sp_arithmetic::{traits::{BaseArithmetic, Unsigned}};
 use smallvec::smallvec;
-
+use codec::{Encode, Decode};
+use pallet_evm::{Account as EVMAccount, FeeCalculator, OnMethodCall};
+use fp_rpc::TransactionStatus;
+use sp_core::crypto::Public;
 use sp_runtime::{
 	traits::{ 
 		Dispatchable,
@@ -95,12 +100,12 @@
 
 /// Re-export a nft pallet
 /// TODO: Check this re-export. Is this safe and good style?
-extern crate pallet_nft;
-pub use pallet_nft::*;
+// extern crate pallet_nft;
+// pub use pallet_nft::*;
 
 /// Reimport pallet inflation
-extern crate pallet_inflation;
-pub use pallet_inflation::*;
+// extern crate pallet_inflation;
+// pub use pallet_inflation::*;
 
 /// An index to a block.
 pub type BlockNumber = u32;
@@ -135,9 +140,9 @@
 /// of data like extrinsics, allowing for them to continue syncing the network through upgrades
 /// to even the core data structures.
 pub mod opaque {
-    use super::*;
+	use super::*;
 
-    pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic;
+	pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic;
 
     /// Opaque block type.
     pub type Block = generic::Block<Header, UncheckedExtrinsic>;
@@ -153,13 +158,13 @@
 
 /// This runtime version.
 pub const VERSION: RuntimeVersion = RuntimeVersion {
-    spec_name: create_runtime_str!("nft"),
-    impl_name: create_runtime_str!("nft"),
-    authoring_version: 1,
-    spec_version: 3,
-    impl_version: 1,
-    apis: RUNTIME_API_VERSIONS,
-    transaction_version: 1,
+	spec_name: create_runtime_str!("nft"),
+	impl_name: create_runtime_str!("nft"),
+	authoring_version: 1,
+	spec_version: 3,
+	impl_version: 1,
+	apis: RUNTIME_API_VERSIONS,
+	transaction_version: 1,
 };
 
 pub const MILLISECS_PER_BLOCK: u64 = 12000;
@@ -180,10 +185,10 @@
 /// The version information used to identify this runtime when compiled natively.
 #[cfg(feature = "std")]
 pub fn native_version() -> NativeVersion {
-    NativeVersion {
-        runtime_version: VERSION,
-        can_author_with: Default::default(),
-    }
+	NativeVersion {
+		runtime_version: VERSION,
+		can_author_with: Default::default(),
+	}
 }
 
 type NegativeImbalance = <Balances as Currency<AccountId>>::NegativeImbalance;
@@ -214,11 +219,11 @@
 const MAXIMUM_BLOCK_WEIGHT: Weight = 2 * WEIGHT_PER_SECOND;
 
 parameter_types! {
-    pub const BlockHashCount: BlockNumber = 2400;
+	pub const BlockHashCount: BlockNumber = 2400;
 	pub RuntimeBlockLength: BlockLength =
 		BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO);
-    pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);
-    pub const MaximumBlockLength: u32 = 5 * 1024 * 1024;
+	pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);
+	pub const MaximumBlockLength: u32 = 5 * 1024 * 1024;
 	pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder()
 		.base_block(BlockExecutionWeight::get())
 		.for_class(DispatchClass::all(), |weights| {
@@ -237,10 +242,56 @@
 		})
 		.avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO)
 		.build_or_panic();
-    pub const Version: RuntimeVersion = VERSION;
-    pub const SS58Prefix: u8 = 42;
+	pub const Version: RuntimeVersion = VERSION;
+	pub const SS58Prefix: u8 = 42;
+}
+
+
+parameter_types! {
+	pub const ChainId: u64 = 8888;
+}
+
+impl pallet_evm::Config for Runtime {
+	type BlockGasLimit = BlockGasLimit;
+	type FeeCalculator = ();
+	type GasWeightMapping = ();
+	type CallOrigin = EnsureAddressTruncated;
+	type WithdrawOrigin = EnsureAddressTruncated;
+	type AddressMapping = HashedAddressMapping<Self::Hashing>;
+	type Precompiles = ();
+	type Currency = Balances;
+	type Event = Event;
+	type OnMethodCall = pallet_nft::NftErcSupport<Self>;
+	type ChainId = ChainId;
+	type Runner = pallet_evm::runner::stack::Runner<Self>;
+	type OnChargeTransaction = ();
+}
+
+pub struct EthereumFindAuthor<F>(core::marker::PhantomData<F>);
+impl<F: FindAuthor<u32>> FindAuthor<H160> for EthereumFindAuthor<F>
+{
+	fn find_author<'a, I>(digests: I) -> Option<H160> where
+		I: 'a + IntoIterator<Item=(ConsensusEngineId, &'a [u8])>
+	{
+		if let Some(author_index) = F::find_author(digests) {
+			let authority_id = Aura::authorities()[author_index as usize].clone();
+			return Some(H160::from_slice(&authority_id.to_raw_vec()[4..24]));
+		}
+		None
+	}
+}
+
+parameter_types! {
+	pub BlockGasLimit: U256 = U256::from(u32::max_value());
 }
 
+impl pallet_ethereum::Config for Runtime {
+	type Event = Event;
+	type FindAuthor = EthereumFindAuthor<Aura>;
+	type StateRoot = pallet_ethereum::IntermediateStateRoot;
+	type EvmSubmitLog = pallet_evm::Pallet<Runtime>;
+}
+
 impl system::Config for Runtime {
     /// The data to be stored in an account.
     type AccountData = pallet_balances::AccountData<Balance>;
@@ -290,7 +341,7 @@
 }
 
 parameter_types! {
-    pub const MinimumPeriod: u64 = SLOT_DURATION / 2;
+	pub const MinimumPeriod: u64 = SLOT_DURATION / 2;
 }
 
 impl pallet_timestamp::Config for Runtime {
@@ -302,8 +353,8 @@
 }
 
 parameter_types! {
-    // pub const ExistentialDeposit: u128 = 500;
-    pub const ExistentialDeposit: u128 = 0;
+	// pub const ExistentialDeposit: u128 = 500;
+	pub const ExistentialDeposit: u128 = 0;
 	pub const MaxLocks: u32 = 50;
 }
 
@@ -325,7 +376,7 @@
 pub const UNIQUE: Balance      = 100 * CENTIUNIQUE;
 
 pub const fn deposit(items: u32, bytes: u32) -> Balance {
-    items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE
+	items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE
 }
 
 parameter_types! {
@@ -341,7 +392,7 @@
 	pub const SignedClaimHandicap: u32 = 2;
 	pub const MaxDepth: u32 = 32;
 	pub const MaxValueSize: u32 = 16 * 1024;
-	pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb 
+	pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb
 	// The lazy deletion runs inside on_initialize.
 	pub DeletionWeightLimit: Weight = AVERAGE_ON_INITIALIZE_RATIO *
 		RuntimeBlockWeights::get().max_block;
@@ -380,10 +431,10 @@
 }
 
 parameter_types! {
-	pub const TransactionByteFee: Balance = 501 * MICROUNIQUE; // Targeting 0.1 Unique per NFT transfer 
+	pub const TransactionByteFee: Balance = 501 * MICROUNIQUE; // Targeting 0.1 Unique per NFT transfer
 }
 
-/// Linear implementor of `WeightToFeePolynomial` 
+/// Linear implementor of `WeightToFeePolynomial`
 pub struct LinearFee<T>(sp_std::marker::PhantomData<T>);
 
 impl<T> WeightToFeePolynomial for LinearFee<T> where
@@ -445,8 +496,8 @@
 }
 
 impl pallet_sudo::Config for Runtime {
-    type Event = Event;
-    type Call = Call;
+	type Event = Event;
+	type Call = Call;
 }
 
 parameter_types! {
@@ -635,11 +686,20 @@
 
 /// Used for the pallet nft in `./nft.rs`
 impl pallet_nft::Config for Runtime {
-    type Event = Event;
-    type WeightInfo = nft_weights::WeightInfo;
+	type Event = Event;
+	type WeightInfo = nft_weights::WeightInfo;
+
+	type EvmWithdrawOrigin = EnsureAddressTruncated;
+	type EvmBackwardsAddressMapping = pallet_nft::MapBackwardsAddressTruncated;
+	type EvmAddressMapping = HashedAddressMapping<Self::Hashing>;
+	type CrossAccountId = pallet_nft::BasicCrossAccountId<Self>;
+
 	type Currency = Balances;
 	type CollectionCreationPrice = CollectionCreationPrice;
 	type TreasuryAccountId = TreasuryAccountId;
+
+	type EthereumChainId = ChainId;
+	type EthereumTransactionSender = pallet_ethereum::Module<Runtime>;
 }
 
 parameter_types! {
@@ -714,6 +774,10 @@
 		Aura: pallet_aura::{Pallet, Config<T>},
 		AuraExt: cumulus_pallet_aura_ext::{Pallet, Config},
 
+		// Frontier
+		EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>},
+		Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, ValidateUnsigned},
+
 		// XCM helpers.
 		XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event<T>} = 50,
 		PolkadotXcm: pallet_xcm::{Pallet, Call, Event<T>, Origin} = 51,
@@ -730,6 +794,22 @@
     }
 );
 
+pub struct TransactionConverter;
+
+impl fp_rpc::ConvertTransaction<UncheckedExtrinsic> for TransactionConverter {
+	fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> UncheckedExtrinsic {
+		UncheckedExtrinsic::new_unsigned(pallet_ethereum::Call::<Runtime>::transact(transaction).into())
+	}
+}
+
+impl fp_rpc::ConvertTransaction<opaque::UncheckedExtrinsic> for TransactionConverter {
+	fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> opaque::UncheckedExtrinsic {
+		let extrinsic = UncheckedExtrinsic::new_unsigned(pallet_ethereum::Call::<Runtime>::transact(transaction).into());
+		let encoded = extrinsic.encode();
+		opaque::UncheckedExtrinsic::decode(&mut &encoded[..]).expect("Encoded extrinsic is always valid")
+	}
+}
+
 /// The address format for describing accounts.
 pub type Address = sp_runtime::MultiAddress<AccountId, ()>;
 /// Block header type as expected by this runtime.
@@ -770,6 +850,14 @@
 }
 
 impl_runtime_apis! {
+	impl pallet_nft::NftApi<Block>
+		for Runtime
+	{
+		fn eth_contract_code(account: H160) -> Option<Vec<u8>> {
+			<pallet_nft::NftErcSupport<Runtime>>::get_code(&account)
+		}
+	}
+
     impl sp_api::Core<Block> for Runtime {
         fn version() -> RuntimeVersion {
             VERSION
@@ -830,6 +918,116 @@
 		}
 	}
 
+	impl fp_rpc::EthereumRuntimeRPCApi<Block> for Runtime {
+		fn chain_id() -> u64 {
+			<Runtime as pallet_evm::Config>::ChainId::get()
+		}
+
+		fn account_basic(address: H160) -> EVMAccount {
+			EVM::account_basic(&address)
+		}
+
+		fn gas_price() -> U256 {
+			<Runtime as pallet_evm::Config>::FeeCalculator::min_gas_price()
+		}
+
+		fn account_code_at(address: H160) -> Vec<u8> {
+			EVM::account_codes(address)
+		}
+
+		fn author() -> H160 {
+			<pallet_ethereum::Module<Runtime>>::find_author()
+		}
+
+		fn storage_at(address: H160, index: U256) -> H256 {
+			let mut tmp = [0u8; 32];
+			index.to_big_endian(&mut tmp);
+			EVM::account_storages(address, H256::from_slice(&tmp[..]))
+		}
+
+		fn call(
+			from: H160,
+			to: H160,
+			data: Vec<u8>,
+			value: U256,
+			gas_limit: U256,
+			gas_price: Option<U256>,
+			nonce: Option<U256>,
+			estimate: bool,
+		) -> Result<pallet_evm::CallInfo, sp_runtime::DispatchError> {
+			let config = if estimate {
+				let mut config = <Runtime as pallet_evm::Config>::config().clone();
+				config.estimate = true;
+				Some(config)
+			} else {
+				None
+			};
+
+			<Runtime as pallet_evm::Config>::Runner::call(
+				from,
+				to,
+				data,
+				value,
+				gas_limit.low_u64(),
+				gas_price,
+				nonce,
+				config.as_ref().unwrap_or(<Runtime as pallet_evm::Config>::config()),
+			).map_err(|err| err.into())
+		}
+
+		fn create(
+			from: H160,
+			data: Vec<u8>,
+			value: U256,
+			gas_limit: U256,
+			gas_price: Option<U256>,
+			nonce: Option<U256>,
+			estimate: bool,
+		) -> Result<pallet_evm::CreateInfo, sp_runtime::DispatchError> {
+			let config = if estimate {
+				let mut config = <Runtime as pallet_evm::Config>::config().clone();
+				config.estimate = true;
+				Some(config)
+			} else {
+				None
+			};
+
+			<Runtime as pallet_evm::Config>::Runner::create(
+				from,
+				data,
+				value,
+				gas_limit.low_u64(),
+				gas_price,
+				nonce,
+				config.as_ref().unwrap_or(<Runtime as pallet_evm::Config>::config()),
+			).map_err(|err| err.into())
+		}
+
+		fn current_transaction_statuses() -> Option<Vec<TransactionStatus>> {
+			Ethereum::current_transaction_statuses()
+		}
+
+		fn current_block() -> Option<pallet_ethereum::Block> {
+			Ethereum::current_block()
+		}
+
+		fn current_receipts() -> Option<Vec<pallet_ethereum::Receipt>> {
+			Ethereum::current_receipts()
+		}
+
+		fn current_all() -> (
+			Option<pallet_ethereum::Block>,
+			Option<Vec<pallet_ethereum::Receipt>>,
+			Option<Vec<TransactionStatus>>
+		) {
+			(
+				Ethereum::current_block(),
+				Ethereum::current_receipts(),
+				Ethereum::current_transaction_statuses()
+			)
+		}
+	}
+
 	impl sp_session::SessionKeys<Block> for Runtime {
 		fn decode_session_keys(
 			encoded: Vec<u8>,
@@ -930,7 +1128,7 @@
 				// hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(),
 				// // System Events
 				// hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(),
-            ];
+			];
 
 			let mut batches = Vec::<BenchmarkBatch>::new();
 			let params = (&config, &whitelist);
modifiedruntime_types.jsondiffbeforeafterboth
--- a/runtime_types.json
+++ b/runtime_types.json
@@ -1,4 +1,10 @@
 {
+    "CrossAccountId": {
+      "_enum": {
+        "substrate": "AccountId",
+        "ethereum": "H160"
+      }
+    },
     "AccessMode": {
       "_enum": [
         "Normal",
@@ -15,27 +21,27 @@
       }
     },
     "Ownership": {
-      "Owner": "AccountId",
+      "Owner": "CrossAccountId",
       "Fraction": "u128"
     },
     "FungibleItemType": {
       "Value": "u128"
     },
     "NftItemType": {
-      "Owner": "AccountId",
+      "Owner": "CrossAccountId",
       "ConstData": "Vec<u8>",
       "VariableData": "Vec<u8>"
     },
     "ReFungibleItemType": {
-      "Owner": "Vec<Ownership<AccountId>>",
+      "Owner": "Vec<Ownership<CrossAccountId>>",
       "ConstData": "Vec<u8>",
       "VariableData": "Vec<u8>"
     },
     "SponsorshipState": {
       "_enum": {
-        "Disabled": null,
-        "Unconfirmed": "AccountId",
-        "Confirmed": "AccountId"
+        "disabled": null,
+        "unconfirmed": "AccountId",
+        "confirmed": "AccountId"
       }
     },
     "Collection": {
modifiedtests/package.jsondiffbeforeafterboth
--- a/tests/package.json
+++ b/tests/package.json
@@ -8,17 +8,18 @@
     "@polkadot/ts": "0.3.89",
     "@polkadot/typegen": "4.13.2-5",
     "@polkadot/util-crypto": "6.7.1",
-    "@types/chai": "^4.2.12",
+    "@types/chai": "^4.2.17",
     "@types/chai-as-promised": "^7.1.3",
-    "@types/mocha": "^8.0.3",
-    "chai": "^4.2.0",
-    "mocha": "^8.1.1",
-    "ts-node": "^9.0.0",
-    "tslint": "^5.20.1",
-    "typescript": "^3.9.7"
+    "@types/mocha": "^8.2.2",
+    "chai": "^4.3.4",
+    "mocha": "^8.3.2",
+    "ts-node": "^9.1.1",
+    "tslint": "^6.1.3",
+    "typescript": "^4.2.4"
   },
   "scripts": {
     "test": "mocha --timeout 9999999 -r ts-node/register ./**/*.test.ts",
+    "testEth": "mocha --timeout 9999999 -r ts-node/register ./**/eth/**/*.test.ts",
     "load": "mocha --timeout 9999999 -r ts-node/register ./**/*.load.ts",
     "loadTransfer": "ts-node src/transfer.nload.ts",
     "testCollision": "mocha --timeout 9999999 -r ts-node/register ./src/collision-tests/*.test.ts", 
@@ -61,8 +62,10 @@
   "dependencies": {
     "@polkadot/api": "4.13.2-5",
     "@polkadot/api-contract": "4.13.2-5",
-    "bignumber.js": "^9.0.0",
-    "chai-as-promised": "^7.1.1"
+    "@polkadot/util": "6.3.1",
+    "bignumber.js": "^9.0.1",
+    "chai-as-promised": "^7.1.1",
+    "web3": "^1.3.5"
   },
   "standard": {
     "globals": [
modifiedtests/src/addCollectionAdmin.test.tsdiffbeforeafterboth
--- a/tests/src/addCollectionAdmin.test.ts
+++ b/tests/src/addCollectionAdmin.test.ts
@@ -9,7 +9,7 @@
 import chaiAsPromised from 'chai-as-promised';
 import privateKey from './substrate/privateKey';
 import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
-import {createCollectionExpectSuccess, destroyCollectionExpectSuccess} from './util/helpers';
+import {createCollectionExpectSuccess, destroyCollectionExpectSuccess, normalizeAccountId} from './util/helpers';
 
 chai.use(chaiAsPromised);
 const expect = chai.expect;
@@ -22,13 +22,13 @@
       const bob = privateKey('//Bob');
 
       const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
-      expect(collection.Owner.toString()).to.be.eq(alice.address);
+      expect(collection.Owner).to.be.deep.eq(normalizeAccountId(alice.address));
 
-      const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, bob.address);
+      const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(bob.address));
       await submitTransactionAsync(alice, changeAdminTx);
 
       const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId));
-      expect(adminListAfterAddAdmin).to.be.contains(bob.address);
+      expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(bob.address));
     });
   });
 
@@ -40,19 +40,19 @@
       const Charlie = privateKey('//CHARLIE');
 
       const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
-      expect(collection.Owner.toString()).to.be.eq(Alice.address);
+      expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address));
 
-      const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);
+      const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
       await submitTransactionAsync(Alice, changeAdminTx);
 
       const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId));
-      expect(adminListAfterAddAdmin).to.be.contains(Bob.address);
+      expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(Bob.address));
 
-      const changeAdminTxCharlie = api.tx.nft.addCollectionAdmin(collectionId, Charlie.address);
+      const changeAdminTxCharlie = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Charlie.address));
       await submitTransactionAsync(Bob, changeAdminTxCharlie);
       const adminListAfterAddNewAdmin: any = (await api.query.nft.adminList(collectionId));
-      expect(adminListAfterAddNewAdmin).to.be.contains(Bob.address);
-      expect(adminListAfterAddNewAdmin).to.be.contains(Charlie.address);
+      expect(adminListAfterAddNewAdmin).to.be.contains(normalizeAccountId(Bob.address));
+      expect(adminListAfterAddNewAdmin).to.be.contains(normalizeAccountId(Charlie.address));
     });
   });
 });
@@ -64,11 +64,11 @@
       const alice = privateKey('//Alice');
       const nonOwner = privateKey('//Bob_stash');
 
-      const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, alice.address);
+      const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(alice.address));
       await expect(submitTransactionExpectFailAsync(nonOwner, changeAdminTx)).to.be.rejected;
 
       const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId));
-      expect(adminListAfterAddAdmin).not.to.be.contains(alice.address);
+      expect(adminListAfterAddAdmin).not.to.be.contains(normalizeAccountId(alice.address));
 
       // Verifying that nothing bad happened (network is live, new collections can be created, etc.)
       await createCollectionExpectSuccess();
@@ -81,7 +81,7 @@
       const alice = privateKey('//Alice');
       const bob = privateKey('//Bob');
 
-      const changeOwnerTx = api.tx.nft.addCollectionAdmin(collectionId, bob.address);
+      const changeOwnerTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(bob.address));
       await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected;
 
       // Verifying that nothing bad happened (network is live, new collections can be created, etc.)
@@ -95,7 +95,7 @@
       const Alice = privateKey('//Alice');
       const Bob = privateKey('//Bob');
       await destroyCollectionExpectSuccess(collectionId);
-      const changeOwnerTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);
+      const changeOwnerTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
       await expect(submitTransactionExpectFailAsync(Alice, changeOwnerTx)).to.be.rejected;
 
       // Verifying that nothing bad happened (network is live, new collections can be created, etc.)
@@ -122,13 +122,13 @@
       expect(chainAdminLimit).to.be.equal(5);
 
       for (let i = 0; i < chainAdminLimit; i++) {
-        const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, accounts[i]);
+        const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(accounts[i]));
         await submitTransactionAsync(Alice, changeAdminTx);
         const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId));
-        expect(adminListAfterAddAdmin).to.be.contains(accounts[i]);
+        expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(accounts[i]));
       }
 
-      const tx = api.tx.nft.addCollectionAdmin(collectionId, accounts[chainAdminLimit]);
+      const tx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(accounts[chainAdminLimit]));
       await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected;
     });
   });
modifiedtests/src/addToContractWhiteList.test.tsdiffbeforeafterboth
--- a/tests/src/addToContractWhiteList.test.ts
+++ b/tests/src/addToContractWhiteList.test.ts
@@ -11,7 +11,7 @@
   deployFlipper
 } from "./util/contracthelpers";
 import {
-  getGenericResult
+  getGenericResult, normalizeAccountId
 } from "./util/helpers"
 
 chai.use(chaiAsPromised);
modifiedtests/src/addToWhiteList.test.tsdiffbeforeafterboth
--- a/tests/src/addToWhiteList.test.ts
+++ b/tests/src/addToWhiteList.test.ts
@@ -15,6 +15,7 @@
   destroyCollectionExpectSuccess,
   enablePublicMintingExpectSuccess,
   enableWhiteListExpectSuccess,
+  normalizeAccountId,
 } from './util/helpers';
 
 chai.use(chaiAsPromised);
@@ -54,7 +55,7 @@
       const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1;
       const Bob = privateKey('//Bob');
 
-      const tx = api.tx.nft.addToWhiteList(collectionId, Bob.address);
+      const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(Bob.address));
       await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected;
     });
   });
@@ -66,7 +67,7 @@
       // tslint:disable-next-line: no-bitwise
       const collectionId = await createCollectionExpectSuccess();
       await destroyCollectionExpectSuccess(collectionId);
-      const tx = api.tx.nft.addToWhiteList(collectionId, Bob.address);
+      const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(Bob.address));
       await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected;
     });
   });
@@ -78,7 +79,7 @@
       const collectionId = await createCollectionExpectSuccess();
       await enableWhiteListExpectSuccess(Alice, collectionId);
       await enablePublicMintingExpectSuccess(Alice, collectionId);
-      const tx = api.tx.nft.createItem(collectionId, Ferdie.address, 'NFT');
+      const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(Ferdie.address), 'NFT');
       await expect(submitTransactionExpectFailAsync(Ferdie, tx)).to.be.rejected;
     });
   });
modifiedtests/src/burnItem.test.tsdiffbeforeafterboth
--- a/tests/src/burnItem.test.ts
+++ b/tests/src/burnItem.test.ts
@@ -10,7 +10,8 @@
   createCollectionExpectSuccess, 
   createItemExpectSuccess,
   getGenericResult,
-  destroyCollectionExpectSuccess
+  destroyCollectionExpectSuccess,
+  normalizeAccountId
 } from './util/helpers';
 import { nullPublicKey } from "./accounts";
 
@@ -99,7 +100,7 @@
 
     await usingApi(async (api) => {
       // Transfer 1/100 of the token to Bob
-      const transfertx = api.tx.nft.transfer(bob.address, collectionId, tokenId, 1);
+      const transfertx = api.tx.nft.transfer(normalizeAccountId(bob.address), collectionId, tokenId, 1);
       const events1 = await submitTransactionAsync(alice, transfertx);
       const result1 = getGenericResult(events1);
 
@@ -119,9 +120,9 @@
       expect(result1.success).to.be.true;
       expect(balanceBefore).to.be.not.null;
       expect(balanceBefore.Owner.length).to.be.equal(2);
-      expect(balanceBefore.Owner[0].Owner).to.be.equal(alice.address);
+      expect(balanceBefore.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(alice.address));
       expect(balanceBefore.Owner[0].Fraction).to.be.equal(99);
-      expect(balanceBefore.Owner[1].Owner).to.be.equal(bob.address);
+      expect(balanceBefore.Owner[1].Owner).to.be.deep.equal(normalizeAccountId(bob.address));
       expect(balanceBefore.Owner[1].Fraction).to.be.equal(1);
 
       // What to expect after burning
@@ -129,7 +130,7 @@
       expect(balance).to.be.not.null;
       expect(balance.Owner.length).to.be.equal(1);
       expect(balance.Owner[0].Fraction).to.be.equal(99);
-      expect(balance.Owner[0].Owner).to.be.equal(alice.address);
+      expect(balance.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(alice.address));
     });
 
   });
@@ -203,7 +204,7 @@
       const result1 = getGenericResult(events1);
       expect(result1.success).to.be.true;
   
-      const tx = api.tx.nft.transfer(bob.address, collectionId, tokenId, 0);
+      const tx = api.tx.nft.transfer(normalizeAccountId(bob.address), collectionId, tokenId, 0);
       const badTransaction = async function () { 
         await submitTransactionExpectFailAsync(alice, tx);
       };
modifiedtests/src/change-collection-owner.test.tsdiffbeforeafterboth
--- a/tests/src/change-collection-owner.test.ts
+++ b/tests/src/change-collection-owner.test.ts
@@ -7,7 +7,7 @@
 import chaiAsPromised from 'chai-as-promised';
 import privateKey from './substrate/privateKey';
 import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from "./substrate/substrate-api";
-import { createCollectionExpectSuccess, createCollectionExpectFailure } from "./util/helpers";
+import { createCollectionExpectSuccess, createCollectionExpectFailure, normalizeAccountId } from "./util/helpers";
 
 chai.use(chaiAsPromised);
 const expect = chai.expect;
@@ -20,13 +20,13 @@
       const bob = privateKey('//Bob');
 
       const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
-      expect(collection.Owner.toString()).to.be.eq(alice.address);
+      expect(collection.Owner).to.be.deep.eq(normalizeAccountId(alice.address));
 
-      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
+      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, normalizeAccountId(bob.address));
       await submitTransactionAsync(alice, changeOwnerTx);
 
       const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();
-      expect(collectionAfterOwnerChange.Owner.toString()).to.be.eq(bob.address);
+      expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(normalizeAccountId(bob.address));
     });
   });
 });
@@ -38,11 +38,11 @@
       const alice = privateKey('//Alice');
       const bob = privateKey('//Bob');
 
-      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
+      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, normalizeAccountId(bob.address));
       await expect(submitTransactionExpectFailAsync(bob, changeOwnerTx)).to.be.rejected;
 
       const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();
-      expect(collectionAfterOwnerChange.Owner.toString()).to.be.eq(alice.address);
+      expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(normalizeAccountId(alice.address));
 
       // Verifying that nothing bad happened (network is live, new collections can be created, etc.)
       await createCollectionExpectSuccess();
@@ -54,7 +54,7 @@
       const alice = privateKey('//Alice');
       const bob = privateKey('//Bob');
 
-      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
+      const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, normalizeAccountId(bob.address));
       await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected;
 
       // Verifying that nothing bad happened (network is live, new collections can be created, etc.)
modifiedtests/src/confirmSponsorship.test.tsdiffbeforeafterboth
--- a/tests/src/confirmSponsorship.test.ts
+++ b/tests/src/confirmSponsorship.test.ts
@@ -19,6 +19,7 @@
   enableWhiteListExpectSuccess,
   enablePublicMintingExpectSuccess,
   addToWhiteListExpectSuccess,
+  normalizeAccountId,
 } from "./util/helpers";
 import { Keyring } from "@polkadot/api";
 import { IKeyringPair } from "@polkadot/types/types";
@@ -76,7 +77,7 @@
       const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', zeroBalance.address);
 
       // Transfer this tokens from unused address to Alice
-      const zeroToAlice = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 0);
+      const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 0);
       const events = await submitTransactionAsync(zeroBalance, zeroToAlice);
       const result = getGenericResult(events);
 
@@ -103,7 +104,7 @@
       const itemId = await createItemExpectSuccess(alice, collectionId, 'Fungible', zeroBalance.address);
 
       // Transfer this tokens from unused address to Alice
-      const zeroToAlice = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 1);
+      const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1);
       const events1 = await submitTransactionAsync(zeroBalance, zeroToAlice);
       const result1 = getGenericResult(events1);
 
@@ -129,7 +130,7 @@
       const itemId = await createItemExpectSuccess(alice, collectionId, 'ReFungible', zeroBalance.address);
 
       // Transfer this tokens from unused address to Alice
-      const zeroToAlice = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 1);
+      const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1);
       const events1 = await submitTransactionAsync(zeroBalance, zeroToAlice);
       const result1 = getGenericResult(events1);
 
@@ -184,13 +185,13 @@
 
       // Transfer this token from Alice to unused address and back
       // Alice to Zero gets sponsored
-      const aliceToZero = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 0);
+      const aliceToZero = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 0);
       const events1 = await submitTransactionAsync(alice, aliceToZero);
       const result1 = getGenericResult(events1);
 
       // Second transfer should fail
       const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
-      const zeroToAlice = api.tx.nft.transfer(alice.address, collectionId, itemId, 0);
+      const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(alice.address), collectionId, itemId, 0);
       const badTransaction = async function () { 
         await submitTransactionExpectFailAsync(zeroBalance, zeroToAlice);
       };
@@ -222,7 +223,7 @@
       const itemId = await createItemExpectSuccess(alice, collectionId, 'Fungible', zeroBalance.address);
 
       // Transfer this tokens in parts from unused address to Alice
-      const zeroToAlice = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 1);
+      const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1);
       const events1 = await submitTransactionAsync(zeroBalance, zeroToAlice);
       const result1 = getGenericResult(events1);
 
@@ -260,13 +261,13 @@
 
       // Transfer this token from Alice to unused address and back
       // Alice to Zero gets sponsored
-      const aliceToZero = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 1);
+      const aliceToZero = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1);
       const events1 = await submitTransactionAsync(alice, aliceToZero);
       const result1 = getGenericResult(events1);
 
       // Second transfer should fail
       const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
-      const zeroToAlice = api.tx.nft.transfer(alice.address, collectionId, itemId, 1);
+      const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(alice.address), collectionId, itemId, 1);
       const badTransaction = async function () { 
         await submitTransactionExpectFailAsync(zeroBalance, zeroToAlice);
       };
modifiedtests/src/contracts.test.tsdiffbeforeafterboth
--- a/tests/src/contracts.test.ts
+++ b/tests/src/contracts.test.ts
@@ -23,6 +23,7 @@
   enablePublicMintingExpectSuccess,
   enableWhiteListExpectSuccess,
   getGenericResult,
+  normalizeAccountId,
   isWhitelisted,
   transferFromExpectSuccess
 } from "./util/helpers";
@@ -74,18 +75,18 @@
       const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, contract.address);
       await submitTransactionAsync(alice, changeAdminTx);
 
-      const tokenBefore: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap();
+      const tokenBefore: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON();
       
       // Transfer
       const transferTx = contract.tx.transfer(value, gasLimit, bob.address, collectionId, tokenId, 1);
       const events = await submitTransactionAsync(alice, transferTx);
       const result = getGenericResult(events);
-      const tokenAfter: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap();
+      const tokenAfter: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON();
 
       // tslint:disable-next-line:no-unused-expression
       expect(result.success).to.be.true;
-      expect(tokenBefore.Owner.toString()).to.be.equal(alice.address);
-      expect(tokenAfter.Owner.toString()).to.be.equal(bob.address);
+      expect(tokenBefore.Owner).to.be.deep.equal(normalizeAccountId(alice.address));
+      expect(tokenAfter.Owner).to.be.deep.equal(normalizeAccountId(bob.address));
     });
   });
 
@@ -169,7 +170,7 @@
 
       const collectionId = await createCollectionExpectSuccess();
       const [contract, deployer] = await deployTransferContract(api);
-      const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', contract.address);
+      const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', contract.address.toString());
 
       const transferTx = contract.tx.approve(value, gasLimit, bob.address, collectionId, tokenId, 1);
       const events = await submitTransactionAsync(alice, transferTx);
@@ -207,7 +208,7 @@
 
       const collectionId = await createCollectionExpectSuccess();
       const [contract, deployer] = await deployTransferContract(api);
-      const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', contract.address);
+      const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', contract.address.toString());
 
       const transferTx = contract.tx.setVariableMetaData(value, gasLimit, collectionId, tokenId, '0x121314');
       const events = await submitTransactionAsync(alice, transferTx);
modifiedtests/src/createMultipleItems.test.tsdiffbeforeafterboth
--- a/tests/src/createMultipleItems.test.ts
+++ b/tests/src/createMultipleItems.test.ts
@@ -13,6 +13,7 @@
   destroyCollectionExpectSuccess,
   getGenericResult,
   IReFungibleTokenDataType,
+  normalizeAccountId,
   setCollectionLimitsExpectSuccess,
 } from './util/helpers';
 
@@ -33,8 +34,8 @@
       expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
       const Alice = privateKey('//Alice');
       const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];
-      const createMultipleItemsTx = await api.tx.nft
-        .createMultipleItems(collectionId, Alice.address, args);
+      const createMultipleItemsTx = api.tx.nft
+        .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
       await submitTransactionAsync(Alice, createMultipleItemsTx);
       const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
       expect(itemsListIndexAfter.toNumber()).to.be.equal(3);
@@ -42,9 +43,9 @@
       const token2Data = (await api.query.nft.nftItemList(collectionId, 2)).toJSON() as unknown as ITokenDataType;
       const token3Data = (await api.query.nft.nftItemList(collectionId, 3)).toJSON() as unknown as ITokenDataType;
 
-      expect(token1Data.Owner.toString()).to.be.equal(Alice.address);
-      expect(token2Data.Owner.toString()).to.be.equal(Alice.address);
-      expect(token3Data.Owner.toString()).to.be.equal(Alice.address);
+      expect(token1Data.Owner).to.be.deep.equal(normalizeAccountId(Alice.address));
+      expect(token2Data.Owner).to.be.deep.equal(normalizeAccountId(Alice.address));
+      expect(token3Data.Owner).to.be.deep.equal(normalizeAccountId(Alice.address));
 
       expect(token1Data.ConstData.toString()).to.be.equal('0x31');
       expect(token2Data.ConstData.toString()).to.be.equal('0x32');
@@ -67,23 +68,23 @@
         {refungible: {const_data: [0x32], variable_data: [0x32], pieces: 1}},
         {refungible: {const_data: [0x33], variable_data: [0x33], pieces: 1}},
       ];
-      const createMultipleItemsTx = await api.tx.nft
-        .createMultipleItems(collectionId, Alice.address, args);
+      const createMultipleItemsTx = api.tx.nft
+        .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
       await submitTransactionAsync(Alice, createMultipleItemsTx);
       const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
       expect(itemsListIndexAfter.toNumber()).to.be.equal(3);
-      const token1Data = (await api.query.nft.reFungibleItemList(collectionId, 1) as any).unwrap() as unknown as IReFungibleTokenDataType;
-      const token2Data = (await api.query.nft.reFungibleItemList(collectionId, 2) as any).unwrap() as unknown as IReFungibleTokenDataType;
-      const token3Data = (await api.query.nft.reFungibleItemList(collectionId, 3) as any).unwrap() as unknown as IReFungibleTokenDataType;
+      const token1Data = (await api.query.nft.reFungibleItemList(collectionId, 1) as any).toJSON() as unknown as IReFungibleTokenDataType;
+      const token2Data = (await api.query.nft.reFungibleItemList(collectionId, 2) as any).toJSON() as unknown as IReFungibleTokenDataType;
+      const token3Data = (await api.query.nft.reFungibleItemList(collectionId, 3) as any).toJSON() as unknown as IReFungibleTokenDataType;
 
-      expect(token1Data.Owner[0].Owner.toString()).to.be.equal(Alice.address);
-      expect(token1Data.Owner[0].Fraction.toNumber()).to.be.equal(1);
+      expect(token1Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Alice.address));
+      expect(token1Data.Owner[0].Fraction).to.be.equal(1);
 
-      expect(token2Data.Owner[0].Owner.toString()).to.be.equal(Alice.address);
-      expect(token2Data.Owner[0].Fraction.toNumber()).to.be.equal(1);
+      expect(token2Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Alice.address));
+      expect(token2Data.Owner[0].Fraction).to.be.equal(1);
 
-      expect(token3Data.Owner[0].Owner.toString()).to.be.equal(Alice.address);
-      expect(token3Data.Owner[0].Fraction.toNumber()).to.be.equal(1);
+      expect(token3Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Alice.address));
+      expect(token3Data.Owner[0].Fraction).to.be.equal(1);
 
       expect(token1Data.ConstData.toString()).to.be.equal('0x31');
       expect(token2Data.ConstData.toString()).to.be.equal('0x32');
@@ -107,7 +108,7 @@
         { nft: ['A', 'A'] },
         { nft: ['B', 'B'] },
       ];
-      const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, alice.address, args);
+      const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
       const events = await submitTransactionAsync(alice, createMultipleItemsTx);
       const result = getGenericResult(events);
       expect(result.success).to.be.true;
@@ -123,7 +124,7 @@
       try {
         const args = [{ invalid: null }, { invalid: null }, { invalid: null }];
         const createMultipleItemsTx = await api.tx.nft
-          .createMultipleItems(collectionId, Alice.address, args);
+          .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
         await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
       } catch (e) {
         // tslint:disable-next-line:no-unused-expression
@@ -136,8 +137,8 @@
     await usingApi(async (api: ApiPromise) => {
       const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1;
       const Alice = privateKey('//Alice');
-      const createMultipleItemsTx = await api.tx.nft
-        .createMultipleItems(collectionId, Alice.address, ['NFT', 'NFT', 'NFT']);
+      const createMultipleItemsTx = api.tx.nft
+        .createMultipleItems(collectionId, normalizeAccountId(Alice.address), ['NFT', 'NFT', 'NFT']);
       await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
     });
   });
@@ -152,20 +153,20 @@
         { nft: ['B'.repeat(2049), 'B'.repeat(2049)] },
         { nft: ['C'.repeat(2049), 'C'.repeat(2049)] },
       ];
-      const createMultipleItemsTx = await api.tx.nft
-        .createMultipleItems(collectionId, Alice.address, args);
+      const createMultipleItemsTx = api.tx.nft
+        .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
       await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
 
       // ReFungible
       const collectionIdReFungible =
         await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
       const argsReFungible = [
-        { ReFungible: ['1'.repeat(2049), '1'.repeat(2049)] },
-        { ReFungible: ['2'.repeat(2049), '2'.repeat(2049)] },
-        { ReFungible: ['3'.repeat(2049), '3'.repeat(2049)] },
+        { ReFungible: ['1'.repeat(2049), '1'.repeat(2049), 10] },
+        { ReFungible: ['2'.repeat(2049), '2'.repeat(2049), 10] },
+        { ReFungible: ['3'.repeat(2049), '3'.repeat(2049), 10] },
       ];
-      const createMultipleItemsTxFungible = await api.tx.nft
-        .createMultipleItems(collectionIdReFungible, Alice.address, argsReFungible);
+      const createMultipleItemsTxFungible = api.tx.nft
+        .createMultipleItems(collectionIdReFungible, normalizeAccountId(Alice.address), argsReFungible);
       await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTxFungible)).to.be.rejected;
     });
   });
@@ -174,8 +175,8 @@
     await usingApi(async (api: ApiPromise) => {
       const collectionId = await createCollectionExpectSuccess();
       const Alice = privateKey('//Alice');
-      const createMultipleItemsTx = await api.tx.nft
-        .createMultipleItems(collectionId, Alice.address, ['NFT', 'Fungible', 'ReFungible']);
+      const createMultipleItemsTx = api.tx.nft
+        .createMultipleItems(collectionId, normalizeAccountId(Alice.address), ['NFT', 'Fungible', 'ReFungible']);
       await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
       // garbage collection :-D
       await destroyCollectionExpectSuccess(collectionId);
@@ -192,7 +193,7 @@
         { nft: ['C'.repeat(2049), 'C'] },
       ];
       const createMultipleItemsTx = await api.tx.nft
-        .createMultipleItems(collectionId, Alice.address, args);
+        .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
       await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
     });
   });
@@ -209,7 +210,7 @@
         { nft: ['A', 'A'] },
         { nft: ['B', 'B'] },
       ];
-      const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, alice.address, args);
+      const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);
       await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;
     });
   });
addedtests/src/eth/fungible.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/eth/fungible.test.ts
@@ -0,0 +1,289 @@
+import privateKey from "../substrate/privateKey";
+import { approveExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess } from "../util/helpers";
+import { collectionIdToAddress, createEthAccount, itWeb3, normalizeEvents, recordEvents, subToEth, transferBalanceToEth } from "./util/helpers"
+import fungibleAbi from './fungibleAbi.json';
+import { expect } from "chai";
+
+describe('Information getting', () => {
+    itWeb3('totalSupply', async ({ web3 }) => {
+        const collection = await createCollectionExpectSuccess({
+            name: 'token name',
+            mode: { type: 'Fungible', decimalPoints: 0 }
+        });
+        const alice = privateKey('//Alice');
+
+        await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { substrate: alice.address });
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(fungibleAbi as any, address);
+        const totalSupply = await contract.methods.totalSupply().call();
+
+        // FIXME: always equals to 0, because this method is not implemented
+        expect(totalSupply).to.equal('0');
+    });
+
+    itWeb3('balanceOf', async ({ web3 }) => {
+        const collection = await createCollectionExpectSuccess({
+            name: 'token name',
+            mode: { type: 'Fungible', decimalPoints: 0 }
+        });
+        const alice = privateKey('//Alice');
+
+        const caller = createEthAccount(web3);
+        await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: caller });
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(fungibleAbi as any, address);
+        const balance = await contract.methods.balanceOf(caller).call();
+
+        expect(balance).to.equal('200');
+    });
+});
+
+describe('Plain calls', () => {
+    itWeb3('Can perform approve()', async ({ web3, api }) => {
+        const collection = await createCollectionExpectSuccess({
+            name: 'token name',
+            mode: { type: 'Fungible', decimalPoints: 0 }
+        });
+        const alice = privateKey('//Alice');
+
+        const owner = createEthAccount(web3);
+        await transferBalanceToEth(api, alice, owner, 999999999999999);
+
+        await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });
+
+        const spender = createEthAccount(web3);
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(fungibleAbi as any, address);
+
+        {
+            const result = await contract.methods.approve(spender, 100).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' });
+            const events = normalizeEvents(result.events);
+
+            expect(events).to.be.deep.equal([
+                {
+                    address,
+                    event: 'Approval',
+                    args: {
+                        owner,
+                        spender,
+                        value: '100',
+                    }
+                }
+            ]);
+        }
+
+        {
+            const allowance = await contract.methods.allowance(owner, spender).call();
+            expect(+allowance).to.equal(100);
+        }
+    });
+
+    itWeb3('Can perform transferFrom()', async ({ web3, api }) => {
+        const collection = await createCollectionExpectSuccess({
+            name: 'token name',
+            mode: { type: 'Fungible', decimalPoints: 0 }
+        });
+        const alice = privateKey('//Alice');
+
+        const owner = createEthAccount(web3);
+        await transferBalanceToEth(api, alice, owner, 999999999999999);
+
+        await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });
+
+        const spender = createEthAccount(web3);
+        await transferBalanceToEth(api, alice, spender, 999999999999999);
+
+        const receiver = createEthAccount(web3);
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(fungibleAbi as any, address);
+
+        await contract.methods.approve(spender, 100).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' });
+
+        {
+            const result = await contract.methods.transferFrom(owner, receiver, 49).send({ from: spender, gas: '0x1000000', gasPrice: '0x01' });
+            const events = normalizeEvents(result.events);
+            expect(events).to.be.deep.equal([
+                {
+                    address,
+                    event: 'Transfer',
+                    args: {
+                        from: owner,
+                        to: receiver,
+                        value: '49',
+                    }
+                },
+                {
+                    address,
+                    event: 'Approval',
+                    args: {
+                        owner,
+                        spender,
+                        value: '51',
+                    }
+                }
+            ]);
+        }
+
+        {
+            const balance = await contract.methods.balanceOf(receiver).call();
+            expect(+balance).to.equal(49);
+        }
+
+        {
+            const balance = await contract.methods.balanceOf(owner).call();
+            expect(+balance).to.equal(151);
+        }
+    });
+
+    itWeb3('Can perform transfer()', async ({ web3, api }) => {
+        const collection = await createCollectionExpectSuccess({
+            name: 'token name',
+            mode: { type: 'Fungible', decimalPoints: 0 }
+        });
+        const alice = privateKey('//Alice');
+
+        const owner = createEthAccount(web3);
+        await transferBalanceToEth(api, alice, owner, 999999999999999);
+
+        await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });
+
+        const receiver = createEthAccount(web3);
+        await transferBalanceToEth(api, alice, receiver, 999999999999999);
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(fungibleAbi as any, address);
+
+        {
+            const result = await contract.methods.transfer(receiver, 50).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' });
+            const events = normalizeEvents(result.events);
+            expect(events).to.be.deep.equal([
+                {
+                    address,
+                    event: 'Transfer',
+                    args: {
+                        from: owner,
+                        to: receiver,
+                        value: '50',
+                    }
+                },
+            ])
+        }
+
+        {
+            const balance = await contract.methods.balanceOf(owner).call();
+            expect(+balance).to.equal(150);
+        }
+
+        {
+            const balance = await contract.methods.balanceOf(receiver).call();
+            expect(+balance).to.equal(50);
+        }
+    });
+});
+
+describe('Substrate calls', () => {
+    itWeb3('Events emitted for approve()', async ({ web3 }) => {
+        const collection = await createCollectionExpectSuccess({
+            mode: { type: 'Fungible', decimalPoints: 0 }
+        });
+        const alice = privateKey('//Alice');
+
+        const receiver = createEthAccount(web3);
+
+        await createFungibleItemExpectSuccess(alice, collection, { Value: 200n });
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(fungibleAbi as any, address);
+
+        const events = await recordEvents(contract, async () => {
+            await approveExpectSuccess(collection, 1, alice, { ethereum: receiver }, 100);
+        });
+
+        expect(events).to.be.deep.equal([
+            {
+                address,
+                event: 'Approval',
+                args: {
+                    owner: subToEth(alice.address),
+                    spender: receiver,
+                    value: '100',
+                }
+            }
+        ]);
+    });
+
+    itWeb3('Events emitted for transferFrom()', async ({ web3 }) => {
+        const collection = await createCollectionExpectSuccess({
+            mode: { type: 'Fungible', decimalPoints: 0 }
+        });
+        const alice = privateKey('//Alice');
+        const bob = privateKey('//Bob');
+
+        const receiver = createEthAccount(web3);
+
+        await createFungibleItemExpectSuccess(alice, collection, { Value: 200n });
+        await approveExpectSuccess(collection, 1, alice, bob, 100);
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(fungibleAbi as any, address);
+
+        const events = await recordEvents(contract, async () => {
+            await transferFromExpectSuccess(collection, 1, bob, alice, { ethereum: receiver }, 51, 'Fungible');
+        });
+
+        expect(events).to.be.deep.equal([
+            {
+                address,
+                event: 'Transfer',
+                args: {
+                    from: subToEth(alice.address),
+                    to: receiver,
+                    value: '51',
+                }
+            },
+            {
+                address,
+                event: 'Approval',
+                args: {
+                    owner: subToEth(alice.address),
+                    spender: subToEth(bob.address),
+                    value: '49',
+                }
+            }
+        ]);
+    });
+
+    itWeb3('Events emitted for transfer()', async ({ web3 }) => {
+        const collection = await createCollectionExpectSuccess({
+            mode: { type: 'Fungible', decimalPoints: 0 }
+        });
+        const alice = privateKey('//Alice');
+
+        const receiver = createEthAccount(web3);
+
+        await createFungibleItemExpectSuccess(alice, collection, { Value: 200n });
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(fungibleAbi as any, address);
+
+        const events = await recordEvents(contract, async () => {
+            await transferExpectSuccess(collection, 1, alice, { ethereum: receiver }, 51, 'Fungible');
+        });
+
+        expect(events).to.be.deep.equal([
+            {
+                address,
+                event: 'Transfer',
+                args: {
+                    from: subToEth(alice.address),
+                    to: receiver,
+                    value: '51',
+                }
+            },
+        ]);
+    });
+});
\ No newline at end of file
addedtests/src/eth/fungibleAbi.jsondiffbeforeafterboth
--- /dev/null
+++ b/tests/src/eth/fungibleAbi.json
@@ -0,0 +1,175 @@
+[
+    {
+        "constant": false,
+        "inputs": [
+            {
+                "name": "_spender",
+                "type": "address"
+            },
+            {
+                "name": "_value",
+                "type": "uint256"
+            }
+        ],
+        "name": "approve",
+        "outputs": [
+            {
+                "name": "",
+                "type": "bool"
+            }
+        ],
+        "payable": false,
+        "stateMutability": "nonpayable",
+        "type": "function"
+    },
+    {
+        "constant": true,
+        "inputs": [],
+        "name": "totalSupply",
+        "outputs": [
+            {
+                "name": "",
+                "type": "uint256"
+            }
+        ],
+        "payable": false,
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "constant": false,
+        "inputs": [
+            {
+                "name": "_from",
+                "type": "address"
+            },
+            {
+                "name": "_to",
+                "type": "address"
+            },
+            {
+                "name": "_value",
+                "type": "uint256"
+            }
+        ],
+        "name": "transferFrom",
+        "outputs": [
+            {
+                "name": "",
+                "type": "bool"
+            }
+        ],
+        "payable": false,
+        "stateMutability": "nonpayable",
+        "type": "function"
+    },
+    {
+        "constant": true,
+        "inputs": [
+            {
+                "name": "_owner",
+                "type": "address"
+            }
+        ],
+        "name": "balanceOf",
+        "outputs": [
+            {
+                "name": "balance",
+                "type": "uint256"
+            }
+        ],
+        "payable": false,
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "constant": false,
+        "inputs": [
+            {
+                "name": "_to",
+                "type": "address"
+            },
+            {
+                "name": "_value",
+                "type": "uint256"
+            }
+        ],
+        "name": "transfer",
+        "outputs": [
+            {
+                "name": "",
+                "type": "bool"
+            }
+        ],
+        "payable": false,
+        "stateMutability": "nonpayable",
+        "type": "function"
+    },
+    {
+        "constant": true,
+        "inputs": [
+            {
+                "name": "_owner",
+                "type": "address"
+            },
+            {
+                "name": "_spender",
+                "type": "address"
+            }
+        ],
+        "name": "allowance",
+        "outputs": [
+            {
+                "name": "",
+                "type": "uint256"
+            }
+        ],
+        "payable": false,
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "anonymous": false,
+        "inputs": [
+            {
+                "indexed": true,
+                "name": "owner",
+                "type": "address"
+            },
+            {
+                "indexed": true,
+                "name": "spender",
+                "type": "address"
+            },
+            {
+                "indexed": false,
+                "name": "value",
+                "type": "uint256"
+            }
+        ],
+        "name": "Approval",
+        "type": "event"
+    },
+    {
+        "anonymous": false,
+        "inputs": [
+            {
+                "indexed": true,
+                "name": "from",
+                "type": "address"
+            },
+            {
+                "indexed": true,
+                "name": "to",
+                "type": "address"
+            },
+            {
+                "indexed": false,
+                "name": "value",
+                "type": "uint256"
+            }
+        ],
+        "name": "Transfer",
+        "type": "event"
+    }
+]
\ No newline at end of file
addedtests/src/eth/fungibleMetadataAbi.jsondiffbeforeafterboth
--- /dev/null
+++ b/tests/src/eth/fungibleMetadataAbi.json
@@ -0,0 +1,41 @@
+[
+    {
+        "inputs": [],
+        "name": "name",
+        "outputs": [
+            {
+                "internalType": "string",
+                "name": "",
+                "type": "string"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "inputs": [],
+        "name": "symbol",
+        "outputs": [
+            {
+                "internalType": "string",
+                "name": "",
+                "type": "string"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "inputs": [],
+        "name": "decimals",
+        "outputs": [
+            {
+                "internalType": "uint8",
+                "name": "",
+                "type": "uint8"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    }
+]
\ No newline at end of file
addedtests/src/eth/metadata.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/eth/metadata.test.ts
@@ -0,0 +1,53 @@
+import { expect } from "chai";
+import privateKey from "../substrate/privateKey";
+import { createCollectionExpectSuccess } from "../util/helpers";
+import { collectionIdToAddress, createEthAccount, itWeb3, transferBalanceToEth } from "./util/helpers";
+import fungibleMetadataAbi from './fungibleMetadataAbi.json';
+
+describe('Common metadata', () => {
+    itWeb3('Returns collection name', async ({ api, web3 }) => {
+        const collection = await createCollectionExpectSuccess({
+            name: 'token name',
+            mode: { type: 'NFT' }
+        });
+        const caller = createEthAccount(web3);
+        await transferBalanceToEth(api, privateKey('//Alice'), caller, 999999);
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address);
+        const name = await contract.methods.name().call({ from: caller });
+
+        expect(name).to.equal('token name');
+    });
+
+    itWeb3('Returns symbol name', async ({ api, web3 }) => {
+        const collection = await createCollectionExpectSuccess({
+            tokenPrefix: 'TOK',
+            mode: { type: 'NFT' }
+        });
+        const caller = createEthAccount(web3);
+        await transferBalanceToEth(api, privateKey('//Alice'), caller, 999999);
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address);
+        const symbol = await contract.methods.symbol().call({ from: caller });
+
+        expect(symbol).to.equal('TOK');
+    });
+});
+
+describe('Fungible metadata', () => {
+    itWeb3('Returns fungible decimals', async ({ api, web3 }) => {
+        const collection = await createCollectionExpectSuccess({
+            mode: { type: 'Fungible', decimalPoints: 6 }
+        });
+        const caller = createEthAccount(web3);
+        await transferBalanceToEth(api, privateKey('//Alice'), caller, 999999);
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address);
+        const decimals = await contract.methods.decimals().call({ from: caller });
+
+        expect(+decimals).to.equal(6);
+    })
+})
\ No newline at end of file
addedtests/src/eth/nonFungible.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/eth/nonFungible.test.ts
@@ -0,0 +1,280 @@
+import privateKey from "../substrate/privateKey";
+import { approveExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, createItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess } from "../util/helpers";
+import { collectionIdToAddress, createEthAccount, itWeb3, normalizeEvents, recordEvents, subToEth, transferBalanceToEth } from "./util/helpers"
+import nonFungibleAbi from './nonFungibleAbi.json';
+import { expect } from "chai";
+
+describe('Information getting', () => {
+    itWeb3('totalSupply', async ({ web3 }) => {
+        const collection = await createCollectionExpectSuccess({
+            mode: { type: 'NFT' }
+        });
+        const alice = privateKey('//Alice');
+
+        await createItemExpectSuccess(alice, collection, 'NFT', { substrate: alice.address });
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
+        const totalSupply = await contract.methods.totalSupply().call();
+
+        // FIXME: always equals to 0, because this method is not implemented
+        expect(totalSupply).to.equal('0');
+    });
+
+    itWeb3('balanceOf', async ({ web3 }) => {
+        const collection = await createCollectionExpectSuccess({
+            mode: { type: 'NFT' }
+        });
+        const alice = privateKey('//Alice');
+
+        const caller = createEthAccount(web3);
+        await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
+        await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
+        await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
+        const balance = await contract.methods.balanceOf(caller).call();
+
+        expect(balance).to.equal('3');
+    });
+
+    itWeb3('ownerOf', async ({ web3 }) => {
+        const collection = await createCollectionExpectSuccess({
+            mode: { type: 'NFT' }
+        });
+        const alice = privateKey('//Alice');
+
+        const caller = createEthAccount(web3);
+        const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
+        const owner = await contract.methods.ownerOf(tokenId).call();
+
+        expect(owner).to.equal(caller);
+    });
+});
+
+describe.only('Plain calls', () => {
+    itWeb3('Can perform approve()', async ({ web3, api }) => {
+        const collection = await createCollectionExpectSuccess({
+            mode: { type: 'NFT' }
+        });
+        const alice = privateKey('//Alice');
+
+        const owner = createEthAccount(web3);
+        await transferBalanceToEth(api, alice, owner, 999999999999999);
+
+        const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
+
+        const spender = createEthAccount(web3);
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
+
+        {
+            const result = await contract.methods.approve(spender, tokenId).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' });
+            const events = normalizeEvents(result.events);
+
+            expect(events).to.be.deep.equal([
+                {
+                    address,
+                    event: 'Approval',
+                    args: {
+                        owner,
+                        approved: spender,
+                        tokenId: tokenId.toString(),
+                    }
+                }
+            ]);
+        }
+    });
+
+    itWeb3('Can perform transferFrom()', async ({ web3, api }) => {
+        const collection = await createCollectionExpectSuccess({
+            mode: { type: 'NFT' }
+        });
+        const alice = privateKey('//Alice');
+
+        const owner = createEthAccount(web3);
+        await transferBalanceToEth(api, alice, owner, 999999999999999);
+
+        const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
+
+        const spender = createEthAccount(web3);
+        await transferBalanceToEth(api, alice, spender, 999999999999999);
+
+        const receiver = createEthAccount(web3);
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
+
+        await contract.methods.approve(spender, tokenId).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' });
+
+        {
+            const result = await contract.methods.transferFrom(owner, receiver, tokenId).send({ from: spender, gas: '0x1000000', gasPrice: '0x01' });
+            const events = normalizeEvents(result.events);
+            expect(events).to.be.deep.equal([
+                {
+                    address,
+                    event: 'Transfer',
+                    args: {
+                        from: owner,
+                        to: receiver,
+                        tokenId: tokenId.toString(),
+                    },
+                },
+            ]);
+        }
+
+        {
+            const balance = await contract.methods.balanceOf(receiver).call();
+            expect(+balance).to.equal(1);
+        }
+
+        {
+            const balance = await contract.methods.balanceOf(owner).call();
+            expect(+balance).to.equal(0);
+        }
+    });
+
+    itWeb3('Can perform transfer()', async ({ web3, api }) => {
+        const collection = await createCollectionExpectSuccess({
+            mode: { type: 'NFT' }
+        });
+        const alice = privateKey('//Alice');
+
+        const owner = createEthAccount(web3);
+        await transferBalanceToEth(api, alice, owner, 999999999999999);
+
+        const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
+
+        const receiver = createEthAccount(web3);
+        await transferBalanceToEth(api, alice, receiver, 999999999999999);
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
+
+        {
+            const result = await contract.methods.transfer(receiver, tokenId).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' });
+            console.log(result);
+            const events = normalizeEvents(result.events);
+            expect(events).to.be.deep.equal([
+                {
+                    address,
+                    event: 'Transfer',
+                    args: {
+                        from: owner,
+                        to: receiver,
+                        tokenId: tokenId.toString(),
+                    }
+                },
+            ])
+        }
+
+        {
+            const balance = await contract.methods.balanceOf(owner).call();
+            expect(+balance).to.equal(0);
+        }
+
+        {
+            const balance = await contract.methods.balanceOf(receiver).call();
+            expect(+balance).to.equal(1);
+        }
+    });
+});
+
+describe('Substrate calls', () => {
+    itWeb3('Events emitted for approve()', async ({ web3 }) => {
+        const collection = await createCollectionExpectSuccess({
+            mode: { type: 'NFT' }
+        });
+        const alice = privateKey('//Alice');
+
+        const receiver = createEthAccount(web3);
+
+        const tokenId = await createItemExpectSuccess(alice, collection, 'NFT');
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
+
+        const events = await recordEvents(contract, async () => {
+            await approveExpectSuccess(collection, tokenId, alice, { ethereum: receiver }, 1);
+        });
+
+        expect(events).to.be.deep.equal([
+            {
+                address,
+                event: 'Approval',
+                args: {
+                    owner: subToEth(alice.address),
+                    approved: receiver,
+                    tokenId: tokenId.toString(),
+                }
+            }
+        ]);
+    });
+
+    itWeb3('Events emitted for transferFrom()', async ({ web3 }) => {
+        const collection = await createCollectionExpectSuccess({
+            mode: { type: 'NFT' }
+        });
+        const alice = privateKey('//Alice');
+        const bob = privateKey('//Bob');
+
+        const receiver = createEthAccount(web3);
+
+        const tokenId = await createItemExpectSuccess(alice, collection, 'NFT');
+        await approveExpectSuccess(collection, tokenId, alice, bob, 1);
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
+
+        const events = await recordEvents(contract, async () => {
+            await transferFromExpectSuccess(collection, tokenId, bob, alice, { ethereum: receiver }, 1, 'NFT');
+        });
+
+        expect(events).to.be.deep.equal([
+            {
+                address,
+                event: 'Transfer',
+                args: {
+                    from: subToEth(alice.address),
+                    to: receiver,
+                    tokenId: tokenId.toString(),
+                }
+            },
+        ]);
+    });
+
+    itWeb3('Events emitted for transfer()', async ({ web3 }) => {
+        const collection = await createCollectionExpectSuccess({
+            mode: { type: 'NFT' }
+        });
+        const alice = privateKey('//Alice');
+
+        const receiver = createEthAccount(web3);
+
+        const tokenId = await createItemExpectSuccess(alice, collection, 'NFT');
+
+        const address = collectionIdToAddress(collection);
+        const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
+
+        const events = await recordEvents(contract, async () => {
+            await transferExpectSuccess(collection, tokenId, alice, { ethereum: receiver }, 1, 'NFT');
+        });
+
+        expect(events).to.be.deep.equal([
+            {
+                address,
+                event: 'Transfer',
+                args: {
+                    from: subToEth(alice.address),
+                    to: receiver,
+                    tokenId: tokenId.toString(),
+                }
+            },
+        ]);
+    });
+});
\ No newline at end of file
addedtests/src/eth/nonFungibleAbi.jsondiffbeforeafterboth
--- /dev/null
+++ b/tests/src/eth/nonFungibleAbi.json
@@ -0,0 +1,406 @@
+[
+    {
+        "anonymous": false,
+        "inputs": [
+            {
+                "indexed": true,
+                "internalType": "address",
+                "name": "owner",
+                "type": "address"
+            },
+            {
+                "indexed": true,
+                "internalType": "address",
+                "name": "approved",
+                "type": "address"
+            },
+            {
+                "indexed": true,
+                "internalType": "uint256",
+                "name": "tokenId",
+                "type": "uint256"
+            }
+        ],
+        "name": "Approval",
+        "type": "event"
+    },
+    {
+        "anonymous": false,
+        "inputs": [
+            {
+                "indexed": true,
+                "internalType": "address",
+                "name": "owner",
+                "type": "address"
+            },
+            {
+                "indexed": true,
+                "internalType": "address",
+                "name": "operator",
+                "type": "address"
+            },
+            {
+                "indexed": false,
+                "internalType": "bool",
+                "name": "approved",
+                "type": "bool"
+            }
+        ],
+        "name": "ApprovalForAll",
+        "type": "event"
+    },
+    {
+        "anonymous": false,
+        "inputs": [
+            {
+                "indexed": true,
+                "internalType": "address",
+                "name": "from",
+                "type": "address"
+            },
+            {
+                "indexed": true,
+                "internalType": "address",
+                "name": "to",
+                "type": "address"
+            },
+            {
+                "indexed": true,
+                "internalType": "uint256",
+                "name": "tokenId",
+                "type": "uint256"
+            }
+        ],
+        "name": "Transfer",
+        "type": "event"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "address",
+                "name": "approved",
+                "type": "address"
+            },
+            {
+                "internalType": "uint256",
+                "name": "tokenId",
+                "type": "uint256"
+            }
+        ],
+        "name": "approve",
+        "outputs": [],
+        "stateMutability": "payable",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "address",
+                "name": "owner",
+                "type": "address"
+            }
+        ],
+        "name": "balanceOf",
+        "outputs": [
+            {
+                "internalType": "uint256",
+                "name": "",
+                "type": "uint256"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "uint256",
+                "name": "tokenId",
+                "type": "uint256"
+            }
+        ],
+        "name": "getApproved",
+        "outputs": [
+            {
+                "internalType": "address",
+                "name": "",
+                "type": "address"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "address",
+                "name": "owner",
+                "type": "address"
+            },
+            {
+                "internalType": "address",
+                "name": "operator",
+                "type": "address"
+            }
+        ],
+        "name": "isApprovedForAll",
+        "outputs": [
+            {
+                "internalType": "bool",
+                "name": "",
+                "type": "bool"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "inputs": [],
+        "name": "name",
+        "outputs": [
+            {
+                "internalType": "string",
+                "name": "res_name",
+                "type": "string"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "uint256",
+                "name": "tokenId",
+                "type": "uint256"
+            }
+        ],
+        "name": "ownerOf",
+        "outputs": [
+            {
+                "internalType": "address",
+                "name": "",
+                "type": "address"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "address",
+                "name": "from",
+                "type": "address"
+            },
+            {
+                "internalType": "address",
+                "name": "to",
+                "type": "address"
+            },
+            {
+                "internalType": "uint256",
+                "name": "tokenId",
+                "type": "uint256"
+            }
+        ],
+        "name": "safeTransferFrom",
+        "outputs": [],
+        "stateMutability": "payable",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "address",
+                "name": "from",
+                "type": "address"
+            },
+            {
+                "internalType": "address",
+                "name": "to",
+                "type": "address"
+            },
+            {
+                "internalType": "uint256",
+                "name": "tokenId",
+                "type": "uint256"
+            },
+            {
+                "internalType": "bytes",
+                "name": "data",
+                "type": "bytes"
+            }
+        ],
+        "name": "safeTransferFrom",
+        "outputs": [],
+        "stateMutability": "payable",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "address",
+                "name": "operator",
+                "type": "address"
+            },
+            {
+                "internalType": "bool",
+                "name": "approved",
+                "type": "bool"
+            }
+        ],
+        "name": "setApprovalForAll",
+        "outputs": [],
+        "stateMutability": "nonpayable",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "bytes4",
+                "name": "interfaceID",
+                "type": "bytes4"
+            }
+        ],
+        "name": "supportsInterface",
+        "outputs": [
+            {
+                "internalType": "bool",
+                "name": "",
+                "type": "bool"
+            }
+        ],
+        "stateMutability": "pure",
+        "type": "function"
+    },
+    {
+        "inputs": [],
+        "name": "symbol",
+        "outputs": [
+            {
+                "internalType": "string",
+                "name": "res_symbol",
+                "type": "string"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "uint256",
+                "name": "index",
+                "type": "uint256"
+            }
+        ],
+        "name": "tokenByIndex",
+        "outputs": [
+            {
+                "internalType": "uint256",
+                "name": "",
+                "type": "uint256"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "address",
+                "name": "owner",
+                "type": "address"
+            },
+            {
+                "internalType": "uint256",
+                "name": "index",
+                "type": "uint256"
+            }
+        ],
+        "name": "tokenOfOwnerByIndex",
+        "outputs": [
+            {
+                "internalType": "uint256",
+                "name": "",
+                "type": "uint256"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "uint256",
+                "name": "tokenId",
+                "type": "uint256"
+            }
+        ],
+        "name": "tokenURI",
+        "outputs": [
+            {
+                "internalType": "string",
+                "name": "",
+                "type": "string"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "inputs": [],
+        "name": "totalSupply",
+        "outputs": [
+            {
+                "internalType": "uint256",
+                "name": "",
+                "type": "uint256"
+            }
+        ],
+        "stateMutability": "view",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "address",
+                "name": "from",
+                "type": "address"
+            },
+            {
+                "internalType": "address",
+                "name": "to",
+                "type": "address"
+            },
+            {
+                "internalType": "uint256",
+                "name": "tokenId",
+                "type": "uint256"
+            }
+        ],
+        "name": "transferFrom",
+        "outputs": [],
+        "stateMutability": "payable",
+        "type": "function"
+    },
+    {
+        "inputs": [
+            {
+                "internalType": "address",
+                "name": "to",
+                "type": "address"
+            },
+            {
+                "internalType": "uint256",
+                "name": "tokenId",
+                "type": "uint256"
+            }
+        ],
+        "name": "transfer",
+        "outputs": [],
+        "stateMutability": "payable",
+        "type": "function"
+    }
+]
\ No newline at end of file
addedtests/src/eth/util/helpers.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/eth/util/helpers.ts
@@ -0,0 +1,116 @@
+import { ApiPromise } from "@polkadot/api";
+import { addressToEvm, evmToAddress } from "@polkadot/util-crypto";
+import Web3 from "web3";
+import usingApi, { submitTransactionAsync } from "../../substrate/substrate-api";
+import { IKeyringPair } from '@polkadot/types/types';
+import { expect } from "chai";
+import { getGenericResult } from "../../util/helpers";
+
+let web3Connected = false;
+export async function usingWeb3<T>(cb: (web3: Web3) => Promise<T> | T): Promise<T> {
+    if (web3Connected) throw new Error('do not nest usingWeb3 calls');
+    web3Connected = true;
+
+    const provider = new Web3.providers.WebsocketProvider("http://localhost:9944");
+    const web3 = new Web3(provider);
+
+    try {
+        return await cb(web3);
+    } finally {
+        // provider.disconnect(3000, 'normal disconnect');
+        provider.connection.close();
+        web3Connected = false;
+    }
+}
+
+export function collectionIdToAddress(address: number): string {
+    if (address >= 0xffffffff || address < 0) throw new Error('id overflow');
+    const buf = Buffer.from([0x17, 0xc4, 0xe6, 0x45, 0x3c, 0xc4, 0x9a, 0xaa, 0xae, 0xac, 0xa8, 0x94, 0xe6, 0xd9, 0x68, 0x3e,
+        address >> 24,
+        (address >> 16) & 0xff,
+        (address >> 8) & 0xff,
+        address & 0xff,
+    ]);
+    return Web3.utils.toChecksumAddress('0x' + buf.toString('hex'));
+}
+
+export function createEthAccount(web3: Web3) {
+    const account = web3.eth.accounts.create();
+    web3.eth.accounts.wallet.add(account.privateKey);
+    return account.address;
+}
+
+export async function transferBalanceToEth(api: ApiPromise, source: IKeyringPair, target: string, amount: number) {
+    const tx = api.tx.balances.transfer(evmToAddress(target), amount);
+    const events = await submitTransactionAsync(source, tx);
+    const result = getGenericResult(events);
+    expect(result.success).to.be.true;
+}
+
+export async function itWeb3(name: string, cb: (apis: { web3: Web3, api: ApiPromise }) => any, opts: { only?: boolean, skip?: boolean } = {}) {
+    let i: any = it;
+    if (opts.only) i = i.only;
+    else if (opts.skip) i = i.skip;
+    i(name, async () => {
+        await usingApi(async api => {
+            await usingWeb3(async web3 => {
+                await cb({ api, web3 });
+            });
+        });
+    });
+}
+itWeb3.only = (name: string, cb: (apis: { web3: Web3, api: ApiPromise }) => any) => itWeb3(name, cb, { only: true });
+itWeb3.skip = (name: string, cb: (apis: { web3: Web3, api: ApiPromise }) => any) => itWeb3(name, cb, { skip: true });
+
+export async function generateSubstrateEthPair(web3: Web3) {
+    let account = web3.eth.accounts.create();
+    const evm = evmToAddress(account.address);
+}
+
+type NormalizedEvent = {
+    address: string,
+    event: string,
+    args: { [key: string]: string }
+};
+
+export function normalizeEvents(events: any): NormalizedEvent[] {
+    const output = [];
+    for (let key of Object.keys(events)) {
+        if (key.match(/^[0-9]+$/)) {
+            output.push(events[key]);
+        } else if (Array.isArray(events[key])) {
+            output.push(...events[key]);
+        } else {
+            output.push(events[key]);
+        }
+    }
+    output.sort((a, b) => a.logIndex - b.logIndex);
+    return output.map(({ address, event, returnValues }) => {
+        const args: { [key: string]: string } = {};
+        for (let key of Object.keys(returnValues)) {
+            if (!key.match(/^[0-9]+$/)) {
+                args[key] = returnValues[key];
+            }
+        }
+        return {
+            address,
+            event,
+            args,
+        };
+    });
+}
+
+export async function recordEvents(contract: any, action: () => Promise<void>): Promise<NormalizedEvent[]> {
+    const out: any = [];
+    contract.events.allEvents((_: any, event: any) => {
+        out.push(event);
+    });
+    await action();
+    return normalizeEvents(out);
+}
+
+export function subToEth(eth: string): string {
+    const bytes = addressToEvm(eth);
+    const string = '0x' + Buffer.from(bytes).toString('hex');
+    return Web3.utils.toChecksumAddress(string);
+}
\ No newline at end of file
modifiedtests/src/pallet-presence.test.tsdiffbeforeafterboth
--- a/tests/src/pallet-presence.test.ts
+++ b/tests/src/pallet-presence.test.ts
@@ -13,7 +13,7 @@
 
 // Pallets that must always be present
 const requiredPallets = [
-  'nft', 'inflation', 'balances', 'contracts', 'randomnesscollectiveflip', 'system', 'timestamp', 'transactionpayment', 'treasury', 'vesting',
+  'nft', 'inflation', 'balances', 'contracts', 'randomnesscollectiveflip', 'system', 'timestamp', 'transactionpayment', 'treasury', 'vesting', 'evm', 'ethereum',
   'scheduler', 'nftpayment', 'charging'
 ];
 
modifiedtests/src/removeCollectionAdmin.test.tsdiffbeforeafterboth
--- a/tests/src/removeCollectionAdmin.test.ts
+++ b/tests/src/removeCollectionAdmin.test.ts
@@ -8,7 +8,7 @@
 import chaiAsPromised from 'chai-as-promised';
 import privateKey from './substrate/privateKey';
 import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
-import {createCollectionExpectSuccess, destroyCollectionExpectSuccess} from './util/helpers';
+import {createCollectionExpectSuccess, destroyCollectionExpectSuccess, normalizeAccountId} from './util/helpers';
 
 chai.use(chaiAsPromised);
 const expect = chai.expect;
@@ -20,20 +20,20 @@
       const Alice = privateKey('//Alice');
       const Bob = privateKey('//Bob');
       const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
-      expect(collection.Owner.toString()).to.be.eq(Alice.address);
+      expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address));
       // first - add collection admin Bob
-      const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address);
+      const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
       await submitTransactionAsync(Alice, addAdminTx);
 
-      const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId));
-      expect(adminListAfterAddAdmin).to.be.contains(Bob.address);
+      const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON();
+      expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(Bob.address));
 
       // then remove bob from admins of collection
-      const removeAdminTx = api.tx.nft.removeCollectionAdmin(collectionId, Bob.address);
+      const removeAdminTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
       await submitTransactionAsync(Alice, removeAdminTx);
 
-      const adminListAfterRemoveAdmin: any = (await api.query.nft.adminList(collectionId));
-      expect(adminListAfterRemoveAdmin).not.to.be.contains(Bob.address);
+      const adminListAfterRemoveAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON;
+      expect(adminListAfterRemoveAdmin).not.to.be.deep.contains(normalizeAccountId(Bob.address));
     });
   });
 
@@ -45,7 +45,7 @@
       const adminListBeforeAddAdmin: any = (await api.query.nft.adminList(collectionId));
       expect(adminListBeforeAddAdmin).to.have.lengthOf(0);
 
-      const tx = api.tx.nft.removeCollectionAdmin(collectionId, Alice.address);
+      const tx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Alice.address));
       await submitTransactionAsync(Alice, tx);
     });
   });
@@ -59,7 +59,7 @@
       const alice = privateKey('//Alice');
       const bob = privateKey('//Bob');
 
-      const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, bob.address);
+      const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(bob.address));
       await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected;
 
       // Verifying that nothing bad happened (network is live, new collections can be created, etc.)
@@ -76,7 +76,7 @@
 
       await destroyCollectionExpectSuccess(collectionId);
 
-      const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, Bob.address);
+      const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
       await expect(submitTransactionExpectFailAsync(Alice, changeOwnerTx)).to.be.rejected;
 
       // Verifying that nothing bad happened (network is live, new collections can be created, etc.)
modifiedtests/src/removeCollectionSponsor.test.tsdiffbeforeafterboth
--- a/tests/src/removeCollectionSponsor.test.ts
+++ b/tests/src/removeCollectionSponsor.test.ts
@@ -21,6 +21,7 @@
   addToWhiteListExpectSuccess,
   removeCollectionSponsorExpectSuccess,
   removeCollectionSponsorExpectFailure,
+  normalizeAccountId,
 } from "./util/helpers";
 import { Keyring } from "@polkadot/api";
 import { IKeyringPair } from "@polkadot/types/types";
@@ -60,7 +61,7 @@
 
       // Transfer this tokens from unused address to Alice - should fail
       const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());
-      const zeroToAlice = api.tx.nft.transfer(alice.address, collectionId, itemId, 0);
+      const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(alice.address), collectionId, itemId, 0);
       const badTransaction = async function () { 
         await submitTransactionExpectFailAsync(zeroBalance, zeroToAlice);
       };
modifiedtests/src/removeFromContractWhiteList.test.tsdiffbeforeafterboth
--- a/tests/src/removeFromContractWhiteList.test.ts
+++ b/tests/src/removeFromContractWhiteList.test.ts
@@ -23,8 +23,8 @@
         await usingApi(async (api) => {
             const [flipper, deployer] = await deployFlipper(api);
 
-            await addToContractWhiteListExpectSuccess(deployer, flipper.address, bob.address);
-            await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address);
+            await addToContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address);
+            await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address);
 
             expect(await isWhitelistedInContract(flipper.address, bob.address)).to.be.false;
         });
@@ -33,12 +33,12 @@
     it('user can\'t execute contract after removal', async () => {
         await usingApi(async (api) => {
             const [flipper, deployer] = await deployFlipper(api);
-            await toggleContractWhitelistExpectSuccess(deployer, flipper.address, true);
+            await toggleContractWhitelistExpectSuccess(deployer, flipper.address.toString(), true);
 
-            await addToContractWhiteListExpectSuccess(deployer, flipper.address, bob.address);
+            await addToContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address);
             await toggleFlipValueExpectSuccess(bob, flipper);
 
-            await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address);
+            await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address);
             await toggleFlipValueExpectFailure(bob, flipper);
         });
     });
@@ -47,9 +47,9 @@
         await usingApi(async (api) => {
             const [flipper, deployer] = await deployFlipper(api);
 
-            await addToContractWhiteListExpectSuccess(deployer, flipper.address, bob.address);
-            await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address);
-            await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address);
+            await addToContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address);
+            await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address);
+            await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address);
         });
     });
 });
@@ -75,7 +75,7 @@
         await usingApi(async (api) => {
             const [flipper, _] = await deployFlipper(api);
 
-            await removeFromContractWhiteListExpectFailure(alice, flipper.address, bob.address);
+            await removeFromContractWhiteListExpectFailure(alice, flipper.address.toString(), bob.address);
         });
     });
 });
modifiedtests/src/setConstOnChainSchema.test.tsdiffbeforeafterboth
--- a/tests/src/setConstOnChainSchema.test.ts
+++ b/tests/src/setConstOnChainSchema.test.ts
@@ -11,6 +11,7 @@
 import {
   createCollectionExpectSuccess,
   destroyCollectionExpectSuccess,
+  normalizeAccountId,
 } from './util/helpers';
 
 chai.use(chaiAsPromised);
@@ -37,7 +38,7 @@
       await usingApi(async (api) => {
       const collectionId = await createCollectionExpectSuccess();
       const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
-      expect(collection.Owner.toString()).to.be.eq(Alice.address);
+      expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address));
       const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema);
       await submitTransactionAsync(Alice, setShema);
     });
@@ -87,7 +88,7 @@
     await usingApi(async (api) => {
       const collectionId = await createCollectionExpectSuccess();
       const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
-      expect(collection.Owner.toString()).to.be.eq(Alice.address);
+      expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address));
       const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema);
       await expect(submitTransactionExpectFailAsync(Bob, setShema)).to.be.rejected;
     });
modifiedtests/src/setPublicAccessMode.test.tsdiffbeforeafterboth
--- a/tests/src/setPublicAccessMode.test.ts
+++ b/tests/src/setPublicAccessMode.test.ts
@@ -17,6 +17,7 @@
   destroyCollectionExpectSuccess,
   enablePublicMintingExpectSuccess,
   enableWhiteListExpectSuccess,
+  normalizeAccountId,
 } from './util/helpers';
 import { utf16ToStr } from './util/util';
 
@@ -49,7 +50,7 @@
       const collectionId = await createCollectionExpectSuccess();
       await enableWhiteListExpectSuccess(Alice, collectionId);
       await enablePublicMintingExpectSuccess(Alice, collectionId);
-      const tx = api.tx.nft.createItem(collectionId, Bob.address, 'NFT');
+      const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(Bob.address), 'NFT');
       await expect(submitTransactionExpectFailAsync(Bob, tx)).to.be.rejected;
     });
   });
modifiedtests/src/setVariableOnChainSchema.test.tsdiffbeforeafterboth
--- a/tests/src/setVariableOnChainSchema.test.ts
+++ b/tests/src/setVariableOnChainSchema.test.ts
@@ -11,6 +11,7 @@
 import {
   createCollectionExpectSuccess,
   destroyCollectionExpectSuccess,
+  normalizeAccountId,
 } from './util/helpers';
 
 chai.use(chaiAsPromised);
@@ -37,7 +38,7 @@
       await usingApi(async (api) => {
       const collectionId = await createCollectionExpectSuccess();
       const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
-      expect(collection.Owner.toString()).to.be.eq(Alice.address);
+      expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address));
       const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema);
       await submitTransactionAsync(Alice, setSchema);
     });
@@ -87,7 +88,7 @@
     await usingApi(async (api) => {
       const collectionId = await createCollectionExpectSuccess();
       const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
-      expect(collection.Owner.toString()).to.be.eq(Alice.address);
+      expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address));
       const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema);
       await expect(submitTransactionExpectFailAsync(Bob, setSchema)).to.be.rejected;
     });
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -8,6 +8,7 @@
 import type { AccountId, BlockNumber, Call, EventRecord } from '@polkadot/types/interfaces';
 import { u128 } from '@polkadot/types/primitive';
 import { IKeyringPair } from '@polkadot/types/types';
+import { evmToAddress } from '@polkadot/util-crypto';
 import { BigNumber } from 'bignumber.js';
 import BN from 'bn.js';
 import chai from 'chai';
@@ -23,6 +24,31 @@
 chai.use(chaiAsPromised);
 const expect = chai.expect;
 
+export type CrossAccountId = {
+  substrate: string,
+} | {
+  ethereum: string,
+};
+export function normalizeAccountId(input: string | CrossAccountId | IKeyringPair): CrossAccountId {
+  if (typeof input === 'string')
+    return { substrate: input };
+  if ('address' in input) {
+    return { substrate: input.address };
+  }
+  if ('ethereum' in input) {
+    input.ethereum = input.ethereum.toLowerCase();
+  }
+  return input;
+}
+export function toSubstrateAddress(input: string | CrossAccountId | IKeyringPair): string {
+  input = normalizeAccountId(input);
+  if ('substrate' in input) {
+    return input.substrate;
+  } else {
+    return evmToAddress(input.ethereum);
+  }
+}
+
 export const U128_MAX = (1n << 128n) - 1n;
 
 type GenericResult = {
@@ -38,15 +64,15 @@
   success: boolean;
   collectionId: number;
   itemId: number;
-  recipient: string;
+  recipient?: CrossAccountId;
 }
 
 interface TransferResult {
   success: boolean;
   collectionId: number;
   itemId: number;
-  sender: string;
-  recipient: string;
+  sender?: CrossAccountId;
+  recipient?: CrossAccountId;
   value: bigint;
 }
 
@@ -120,7 +146,7 @@
     // console.log(`    ${phase}: ${section}.${method}:: ${data}`);
     if (method == 'ExtrinsicSuccess') {
       success = true;
-    } else if ((section == 'nft')  && (method == 'CollectionCreated')) {
+    } else if ((section == 'nft') && (method == 'CollectionCreated')) {
       collectionId = parseInt(data[0].toString());
     }
   });
@@ -135,7 +161,7 @@
   let success = false;
   let collectionId: number = 0;
   let itemId: number = 0;
-  let recipient: string = '';
+  let recipient;
   events.forEach(({ phase, event: { data, method, section } }) => {
     // console.log(`    ${phase}: ${section}.${method}:: ${data}`);
     if (method == 'ExtrinsicSuccess') {
@@ -143,7 +169,7 @@
     } else if ((section == 'nft') && (method == 'ItemCreated')) {
       collectionId = parseInt(data[0].toString());
       itemId = parseInt(data[1].toString());
-      recipient = data[2].toString();
+      recipient = data[2].toJSON();
     }
   });
   const result: CreateItemResult = {
@@ -160,19 +186,17 @@
     success: false,
     collectionId: 0,
     itemId: 0,
-    sender: '',
-    recipient: '',
     value: 0n,
   };
 
-  events.forEach(({event: {data, method, section}}) => {
+  events.forEach(({ event: { data, method, section } }) => {
     if (method === 'ExtrinsicSuccess') {
       result.success = true;
     } else if (section === 'nft' && method === 'Transfer') {
       result.collectionId = +data[0].toString();
       result.itemId = +data[1].toString();
-      result.sender = data[2].toString();
-      result.recipient = data[3].toString();
+      result.sender = data[2].toJSON() as CrossAccountId;
+      result.recipient = data[3].toJSON() as CrossAccountId;
       result.value = BigInt(data[4].toString());
     }
   });
@@ -214,7 +238,7 @@
 }
 
 export async function createCollectionExpectSuccess(params: Partial<CreateCollectionParams> = {}): Promise<number> {
-  const {name, description, mode, tokenPrefix } = {...defaultCreateCollectionParams, ...params};
+  const { name, description, mode, tokenPrefix } = { ...defaultCreateCollectionParams, ...params };
 
   let collectionId: number = 0;
   await usingApi(async (api) => {
@@ -226,13 +250,13 @@
 
     let modeprm = {};
     if (mode.type === 'NFT') {
-      modeprm = {nft: null};
+      modeprm = { nft: null };
     } else if (mode.type === 'Fungible') {
-      modeprm = {fungible: mode.decimalPoints};
+      modeprm = { fungible: mode.decimalPoints };
     } else if (mode.type === 'ReFungible') {
-      modeprm = {refungible: null};
+      modeprm = { refungible: null };
     } else if (mode.type === 'Invalid') {
-      modeprm = {invalid: null};
+      modeprm = { invalid: null };
     }
 
     const tx = api.tx.nft.createCollection(strToUTF16(name), strToUTF16(description), strToUTF16(tokenPrefix), modeprm);
@@ -243,7 +267,7 @@
     const BcollectionCount = parseInt((await api.query.nft.createdCollectionCount()).toString(), 10);
 
     // Get the collection
-    const collection: any = (await api.query.nft.collectionById(result.collectionId)).toJSON();
+    const collection: any = (await api.query.nft.collectionById(result.collectionId) as any).toJSON();
 
     // What to expect
     // tslint:disable-next-line:no-unused-expression
@@ -252,7 +276,7 @@
     // tslint:disable-next-line:no-unused-expression
     expect(collection).to.be.not.null;
     expect(BcollectionCount).to.be.equal(AcollectionCount + 1, 'Error: NFT collection NOT created.');
-    expect(collection.Owner).to.be.equal(alicesPublicKey);
+    expect(collection.Owner).to.be.equal(toSubstrateAddress(alicesPublicKey));
     expect(utf16ToStr(collection.Name)).to.be.equal(name);
     expect(utf16ToStr(collection.Description)).to.be.equal(description);
     expect(hexToStr(collection.TokenPrefix)).to.be.equal(tokenPrefix);
@@ -264,17 +288,17 @@
 }
 
 export async function createCollectionExpectFailure(params: Partial<CreateCollectionParams> = {}) {
-  const {name, description, mode, tokenPrefix } = {...defaultCreateCollectionParams, ...params};
+  const { name, description, mode, tokenPrefix } = { ...defaultCreateCollectionParams, ...params };
 
   let modeprm = {};
   if (mode.type === 'NFT') {
-    modeprm = {nft: null};
+    modeprm = { nft: null };
   } else if (mode.type === 'Fungible') {
-    modeprm = {fungible: mode.decimalPoints};
+    modeprm = { fungible: mode.decimalPoints };
   } else if (mode.type === 'ReFungible') {
-    modeprm = {refungible: null};
+    modeprm = { refungible: null };
   } else if (mode.type === 'Invalid') {
-    modeprm = {invalid: null};
+    modeprm = { invalid: null };
   }
 
   await usingApi(async (api) => {
@@ -301,7 +325,7 @@
   let bal = new BigNumber(0);
   let unused;
   do {
-    const randomSeed = 'seed' +  Math.floor(Math.random() * Math.floor(10000)) + seedAddition;
+    const randomSeed = 'seed' + Math.floor(Math.random() * Math.floor(10000)) + seedAddition;
     const keyring = new Keyring({ type: 'sr25519' });
     unused = keyring.addFromUri(`//${randomSeed}`);
     bal = new BigNumber((await api.query.system.account(unused.address)).data.free.toString());
@@ -408,7 +432,7 @@
     // What to expect
     expect(result.success).to.be.true;
     expect(collection.Sponsorship).to.deep.equal({
-      Unconfirmed: sponsor.toString(),
+      unconfirmed: sponsor,
     });
   });
 }
@@ -427,7 +451,7 @@
 
     // What to expect
     expect(result.success).to.be.true;
-    expect(collection.Sponsorship).to.be.deep.equal({ Disabled: null });
+    expect(collection.Sponsorship).to.be.deep.equal({ disabled: null });
   });
 }
 
@@ -466,7 +490,7 @@
     // What to expect
     expect(result.success).to.be.true;
     expect(collection.Sponsorship).to.be.deep.equal({
-      Confirmed: sender.address,
+      confirmed: sender.address,
     });
   });
 }
@@ -540,9 +564,9 @@
   return whitelisted;
 }
 
-export async function addToContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: string) {
+export async function addToContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) {
   await usingApi(async (api) => {
-    const tx = api.tx.nft.addToContractWhiteList(contractAddress, user);
+    const tx = api.tx.nft.addToContractWhiteList(contractAddress.toString(), user.toString());
     const events = await submitTransactionAsync(sender, tx);
     const result = getGenericResult(events);
 
@@ -550,9 +574,9 @@
   });
 }
 
-export async function removeFromContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: string) {
+export async function removeFromContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) {
   await usingApi(async (api) => {
-    const tx = api.tx.nft.removeFromContractWhiteList(contractAddress, user);
+    const tx = api.tx.nft.removeFromContractWhiteList(contractAddress.toString(), user.toString());
     const events = await submitTransactionAsync(sender, tx);
     const result = getGenericResult(events);
 
@@ -560,9 +584,9 @@
   });
 }
 
-export async function removeFromContractWhiteListExpectFailure(sender: IKeyringPair, contractAddress: AccountId | string, user: string) {
+export async function removeFromContractWhiteListExpectFailure(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) {
   await usingApi(async (api) => {
-    const tx = api.tx.nft.removeFromContractWhiteList(contractAddress, user);
+    const tx = api.tx.nft.removeFromContractWhiteList(contractAddress.toString(), user.toString());
     const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;
     const result = getGenericResult(events);
 
@@ -635,72 +659,70 @@
 }
 
 export async function
-approveExpectSuccess(collectionId: number,
-                     tokenId: number, owner: IKeyringPair, approved: IKeyringPair | string, amount: number | bigint = 1) {
-  if (typeof approved !== 'string')
-    approved = approved.address;
+  approveExpectSuccess(collectionId: number,
+    tokenId: number, owner: IKeyringPair, approved: IKeyringPair | CrossAccountId | string, amount: number | bigint = 1) {
   await usingApi(async (api: ApiPromise) => {
+    approved = normalizeAccountId(approved);
     const allowanceBefore =
-      await api.query.nft.allowances(collectionId, [tokenId, owner.address, approved] as any) as unknown as BN;
-    const approveNftTx = await api.tx.nft.approve(approved, collectionId, tokenId, amount);
+      await api.query.nft.allowances(collectionId, [tokenId, owner.address, toSubstrateAddress(approved)]) as unknown as BN;
+    const approveNftTx = api.tx.nft.approve(approved, collectionId, tokenId, amount);
     const events = await submitTransactionAsync(owner, approveNftTx);
     const result = getCreateItemResult(events);
     // tslint:disable-next-line:no-unused-expression
     expect(result.success).to.be.true;
     const allowanceAfter =
-      await api.query.nft.allowances(collectionId, [tokenId, owner.address, approved] as any) as unknown as BN;
+      await api.query.nft.allowances(collectionId, [tokenId, owner.address, toSubstrateAddress(approved)]) as unknown as BN;
     expect(allowanceAfter.sub(allowanceBefore).toString()).to.be.equal(amount.toString());
   });
 }
 
 export async function
-transferFromExpectSuccess(collectionId: number,
-                          tokenId: number,
-                          accountApproved: IKeyringPair,
-                          accountFrom: IKeyringPair | string,
-                          accountTo: IKeyringPair,
-                          value: number | bigint = 1,
-                          type: string = 'NFT') {
-  if (typeof accountFrom !== 'string')
-    accountFrom = accountFrom.address;
+  transferFromExpectSuccess(collectionId: number,
+    tokenId: number,
+    accountApproved: IKeyringPair,
+    accountFrom: IKeyringPair | CrossAccountId,
+    accountTo: IKeyringPair | CrossAccountId,
+    value: number | bigint = 1,
+    type: string = 'NFT') {
   await usingApi(async (api: ApiPromise) => {
+    const to = normalizeAccountId(accountTo);
     let balanceBefore = new BN(0);
     if (type === 'Fungible') {
-      balanceBefore = await api.query.nft.balance(collectionId, accountTo.address) as unknown as BN;
+      balanceBefore = await api.query.nft.balance(collectionId, toSubstrateAddress(to)) as unknown as BN;
     }
-    const transferFromTx = await api.tx.nft.transferFrom(
-      accountFrom, accountTo.address, collectionId, tokenId, value);
+    const transferFromTx = api.tx.nft.transferFrom(
+      normalizeAccountId(accountFrom), to, collectionId, tokenId, value);
     const events = await submitTransactionAsync(accountApproved, transferFromTx);
     const result = getCreateItemResult(events);
     // tslint:disable-next-line:no-unused-expression
     expect(result.success).to.be.true;
     if (type === 'NFT') {
-      const nftItemData = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap() as ITokenDataType;
-      expect(nftItemData.Owner.toString()).to.be.equal(accountTo.address);
+      const nftItemData = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON() as ITokenDataType;
+      expect(nftItemData.Owner).to.be.deep.equal(to);
     }
     if (type === 'Fungible') {
-      const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, accountTo.address) as any).Value as unknown as BN;
+      const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to)) as any).Value as unknown as BN;
       expect(balanceAfter.sub(balanceBefore).toString()).to.be.equal(value.toString());
     }
     if (type === 'ReFungible') {
       const nftItemData =
-        (await api.query.nft.reFungibleItemList(collectionId, tokenId) as any).unwrap() as IReFungibleTokenDataType;
-      expect(nftItemData.Owner[0].Owner.toString()).to.be.equal(accountTo.address);
-      expect(nftItemData.Owner[0].Fraction.toNumber()).to.be.equal(value);
+        (await api.query.nft.reFungibleItemList(collectionId, tokenId) as any).toJSON() as IReFungibleTokenDataType;
+      expect(nftItemData.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(to));
+      expect(nftItemData.Owner[0].Fraction).to.be.equal(value);
     }
   });
 }
 
 export async function
-transferFromExpectFail(collectionId: number,
-                       tokenId: number,
-                       accountApproved: IKeyringPair,
-                       accountFrom: IKeyringPair,
-                       accountTo: IKeyringPair,
-                       value: number | bigint = 1) {
+  transferFromExpectFail(collectionId: number,
+    tokenId: number,
+    accountApproved: IKeyringPair,
+    accountFrom: IKeyringPair,
+    accountTo: IKeyringPair,
+    value: number | bigint = 1) {
   await usingApi(async (api: ApiPromise) => {
-    const transferFromTx = await api.tx.nft.transferFrom(
-      accountFrom.address, accountTo.address, collectionId, tokenId, value);
+    const transferFromTx = api.tx.nft.transferFrom(
+      normalizeAccountId(accountFrom.address), normalizeAccountId(accountTo.address), collectionId, tokenId, value);
     const events = await expect(submitTransactionExpectFailAsync(accountApproved, transferFromTx)).to.be.rejected;
     const result = getCreateCollectionResult(events);
     // tslint:disable-next-line:no-unused-expression
@@ -757,53 +779,55 @@
 
 
 export async function
-transferExpectSuccess(collectionId: number,
-                      tokenId: number,
-                      sender: IKeyringPair,
-                      recipient: IKeyringPair,
-                      value: number | bigint = 1,
-                      type: string = 'NFT') {
+  transferExpectSuccess(collectionId: number,
+    tokenId: number,
+    sender: IKeyringPair,
+    recipient: IKeyringPair | CrossAccountId,
+    value: number | bigint = 1,
+    type: string = 'NFT') {
   await usingApi(async (api: ApiPromise) => {
+    const to = normalizeAccountId(recipient);
+
     let balanceBefore = new BN(0);
     if (type === 'Fungible') {
-      balanceBefore = await api.query.nft.balance(collectionId, recipient.address) as unknown as BN;
+      balanceBefore = await api.query.nft.balance(collectionId, toSubstrateAddress(to)) as unknown as BN;
     }
-    const transferTx = await api.tx.nft.transfer(recipient.address, collectionId, tokenId, value);
+    const transferTx = api.tx.nft.transfer(to, collectionId, tokenId, value);
     const events = await submitTransactionAsync(sender, transferTx);
     const result = getTransferResult(events);
     // tslint:disable-next-line:no-unused-expression
     expect(result.success).to.be.true;
     expect(result.collectionId).to.be.equal(collectionId);
     expect(result.itemId).to.be.equal(tokenId);
-    expect(result.sender).to.be.equal(sender.address);
-    expect(result.recipient).to.be.equal(recipient.address);
+    expect(result.sender).to.be.deep.equal(normalizeAccountId(sender.address));
+    expect(result.recipient).to.be.deep.equal(to);
     expect(result.value.toString()).to.be.equal(value.toString());
     if (type === 'NFT') {
       const nftItemData = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON() as unknown as ITokenDataType;
-      expect(nftItemData.Owner.toString()).to.be.equal(recipient.address);
+      expect(nftItemData.Owner).to.be.deep.equal(to);
     }
     if (type === 'Fungible') {
-      const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, recipient.address) as any).Value as unknown as BN;
+      const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to)) as any).Value as unknown as BN;
       expect(balanceAfter.sub(balanceBefore).toString()).to.be.equal(value.toString());
     }
     if (type === 'ReFungible') {
       const nftItemData =
         (await api.query.nft.reFungibleItemList(collectionId, tokenId)).toJSON() as unknown as IReFungibleTokenDataType;
-      expect(nftItemData.Owner[0].Owner.toString()).to.be.equal(recipient.address);
+      expect(nftItemData.Owner[0].Owner).to.be.deep.equal(to);
       expect(nftItemData.Owner[0].Fraction.toString()).to.be.equal(value.toString());
     }
   });
 }
 
 export async function
-transferExpectFail(collectionId: number,
-                   tokenId: number,
-                   sender: IKeyringPair,
-                   recipient: IKeyringPair,
-                   value: number | bigint = 1,
-                   type: string = 'NFT') {
+  transferExpectFail(collectionId: number,
+    tokenId: number,
+    sender: IKeyringPair,
+    recipient: IKeyringPair,
+    value: number | bigint = 1,
+    type: string = 'NFT') {
   await usingApi(async (api: ApiPromise) => {
-    const transferTx = await api.tx.nft.transfer(recipient.address, collectionId, tokenId, value);
+    const transferTx = api.tx.nft.transfer(normalizeAccountId(recipient.address), collectionId, tokenId, value);
     const events = await expect(submitTransactionExpectFailAsync(sender, transferTx)).to.be.rejected;
     if (events && Array.isArray(events)) {
       const result = getCreateCollectionResult(events);
@@ -814,10 +838,10 @@
 }
 
 export async function
-approveExpectFail(collectionId: number,
-                  tokenId: number, owner: IKeyringPair, approved: IKeyringPair, amount: number | bigint = 1) {
+  approveExpectFail(collectionId: number,
+    tokenId: number, owner: IKeyringPair, approved: IKeyringPair, amount: number | bigint = 1) {
   await usingApi(async (api: ApiPromise) => {
-    const approveNftTx = await api.tx.nft.approve(approved.address, collectionId, tokenId, amount);
+    const approveNftTx = api.tx.nft.approve(normalizeAccountId(approved.address), collectionId, tokenId, amount);
     const events = await expect(submitTransactionExpectFailAsync(owner, approveNftTx)).to.be.rejected;
     const result = getCreateCollectionResult(events);
     // tslint:disable-next-line:no-unused-expression
@@ -830,7 +854,7 @@
   owner: string,
 ) {
   return await usingApi(async (api) => {
-    const response = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON() as unknown as {Value: string};
+    const response = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON() as unknown as { Value: string };
     return BigInt(response.Value);
   });
 }
@@ -839,10 +863,10 @@
   sender: IKeyringPair,
   collectionId: number,
   data: CreateFungibleData,
-  owner: string = sender.address,
+  owner: CrossAccountId | string = sender.address,
 ) {
   return await usingApi(async (api) => {
-    const tx = api.tx.nft.createItem(collectionId, owner, { Fungible: data });
+    const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), { Fungible: data });
 
     const events = await submitTransactionAsync(sender, tx);
     const result = getCreateItemResult(events);
@@ -853,28 +877,30 @@
 }
 
 export async function createItemExpectSuccess(
-  sender: IKeyringPair, collectionId: number, createMode: string, owner: string | AccountId = sender.address) {
+  sender: IKeyringPair, collectionId: number, createMode: string, owner: CrossAccountId | string = sender.address) {
   let newItemId: number = 0;
   await usingApi(async (api) => {
+    const to = normalizeAccountId(owner);
     const AItemCount = parseInt((await api.query.nft.itemListIndex(collectionId)).toString(), 10);
-    const Aitem: any = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON();
+    const Aitem: any = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to))).toJSON();
     const AItemBalance = new BigNumber(Aitem.Value);
 
     let tx;
     if (createMode === 'Fungible') {
-      const createData = {fungible: {value: 10}};
-      tx = api.tx.nft.createItem(collectionId, owner, createData);
+      const createData = { fungible: { value: 10 } };
+      tx = api.tx.nft.createItem(collectionId, to, createData);
     } else if (createMode === 'ReFungible') {
-      const createData = {refungible: {const_data: [], variable_data: [], pieces: 100}};
-      tx = api.tx.nft.createItem(collectionId, owner, createData);
+      const createData = { refungible: { const_data: [], variable_data: [], pieces: 100 } };
+      tx = api.tx.nft.createItem(collectionId, to, createData);
     } else {
-      tx = api.tx.nft.createItem(collectionId, owner, createMode);
+      tx = api.tx.nft.createItem(collectionId, to, createMode);
     }
+
     const events = await submitTransactionAsync(sender, tx);
     const result = getCreateItemResult(events);
 
     const BItemCount = parseInt((await api.query.nft.itemListIndex(collectionId)).toString(), 10);
-    const Bitem: any = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON();
+    const Bitem: any = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to))).toJSON();
     const BItemBalance = new BigNumber(Bitem.Value);
 
     // What to expect
@@ -886,8 +912,8 @@
       expect(BItemCount).to.be.equal(AItemCount + 1);
     }
     expect(collectionId).to.be.equal(result.collectionId);
-    expect(BItemCount).to.be.equal(result.itemId);
-    expect(owner.toString()).to.be.equal(result.recipient);
+    expect(BItemCount.toString()).to.be.equal(result.itemId.toString());
+    expect(to).to.be.deep.equal(result.recipient);
     newItemId = result.itemId;
   });
   return newItemId;
@@ -896,7 +922,8 @@
 export async function createItemExpectFailure(
   sender: IKeyringPair, collectionId: number, createMode: string, owner: string = sender.address) {
   await usingApi(async (api) => {
-    const tx = api.tx.nft.createItem(collectionId, owner, createMode);
+    const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), createMode);
+    
     const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;
     const result = getCreateItemResult(events);
 
@@ -980,7 +1007,7 @@
     const whiteListedBefore = (await api.query.nft.whiteList(collectionId, address)).toJSON();
 
     // Run the transaction
-    const tx = api.tx.nft.addToWhiteList(collectionId, address);
+    const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(address));
     const events = await submitTransactionAsync(sender, tx);
     const result = getGenericResult(events);
 
@@ -996,10 +1023,10 @@
   });
 }
 
-export async function removeFromWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: string) {
+export async function removeFromWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: CrossAccountId) {
   await usingApi(async (api) => {
     // Run the transaction
-    const tx = api.tx.nft.removeFromWhiteList(collectionId, address);
+    const tx = api.tx.nft.removeFromWhiteList(collectionId, normalizeAccountId(address));
     const events = await submitTransactionAsync(sender, tx);
     const result = getGenericResult(events);
 
@@ -1009,10 +1036,10 @@
   });
 }
 
-export async function removeFromWhiteListExpectFailure(sender: IKeyringPair, collectionId: number, address: string) {
+export async function removeFromWhiteListExpectFailure(sender: IKeyringPair, collectionId: number, address: CrossAccountId) {
   await usingApi(async (api) => {
     // Run the transaction
-    const tx = api.tx.nft.removeFromWhiteList(collectionId, address);
+    const tx = api.tx.nft.removeFromWhiteList(collectionId, normalizeAccountId(address));
     const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;
     const result = getGenericResult(events);
 
modifiedtests/yarn.lockdiffbeforeafterboth
before · tests/yarn.lock
1# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.2# yarn lockfile v1345"@babel/cli@^7.14.3":6  version "7.14.5"7  resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.14.5.tgz#9551b194f02360729de6060785bbdcce52c69f0a"8  integrity sha512-poegjhRvXHWO0EAsnYajwYZuqcz7gyfxwfaecUESxDujrqOivf3zrjFbub8IJkrqEaz3fvJWh001EzxBub54fg==9  dependencies:10    commander "^4.0.1"11    convert-source-map "^1.1.0"12    fs-readdir-recursive "^1.1.0"13    glob "^7.0.0"14    make-dir "^2.1.0"15    slash "^2.0.0"16    source-map "^0.5.0"17  optionalDependencies:18    "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.2"19    chokidar "^3.4.0"2021"@babel/code-frame@7.12.11":22  version "7.12.11"23  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"24  integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==25  dependencies:26    "@babel/highlight" "^7.10.4"2728"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13":29  version "7.12.13"30  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658"31  integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==32  dependencies:33    "@babel/highlight" "^7.12.13"3435"@babel/code-frame@^7.14.5":36  version "7.14.5"37  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb"38  integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==39  dependencies:40    "@babel/highlight" "^7.14.5"4142"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5":43  version "7.14.5"44  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.5.tgz#8ef4c18e58e801c5c95d3c1c0f2874a2680fadea"45  integrity sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==4647"@babel/core@^7.1.0", "@babel/core@^7.7.5":48  version "7.12.13"49  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.13.tgz#b73a87a3a3e7d142a66248bf6ad88b9ceb093425"50  integrity sha512-BQKE9kXkPlXHPeqissfxo0lySWJcYdEP0hdtJOH/iJfDdhOCcgtNCjftCJg3qqauB4h+lz2N6ixM++b9DN1Tcw==51  dependencies:52    "@babel/code-frame" "^7.12.13"53    "@babel/generator" "^7.12.13"54    "@babel/helper-module-transforms" "^7.12.13"55    "@babel/helpers" "^7.12.13"56    "@babel/parser" "^7.12.13"57    "@babel/template" "^7.12.13"58    "@babel/traverse" "^7.12.13"59    "@babel/types" "^7.12.13"60    convert-source-map "^1.7.0"61    debug "^4.1.0"62    gensync "^1.0.0-beta.1"63    json5 "^2.1.2"64    lodash "^4.17.19"65    semver "^5.4.1"66    source-map "^0.5.0"6768"@babel/core@^7.14.3", "@babel/core@^7.7.2":69  version "7.14.5"70  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.5.tgz#d281f46a9905f07d1b3bf71ead54d9c7d89cb1e3"71  integrity sha512-RN/AwP2DJmQTZSfiDaD+JQQ/J99KsIpOCfBE5pL+5jJSt7nI3nYGoAXZu+ffYSQ029NLs2DstZb+eR81uuARgg==72  dependencies:73    "@babel/code-frame" "^7.14.5"74    "@babel/generator" "^7.14.5"75    "@babel/helper-compilation-targets" "^7.14.5"76    "@babel/helper-module-transforms" "^7.14.5"77    "@babel/helpers" "^7.14.5"78    "@babel/parser" "^7.14.5"79    "@babel/template" "^7.14.5"80    "@babel/traverse" "^7.14.5"81    "@babel/types" "^7.14.5"82    convert-source-map "^1.7.0"83    debug "^4.1.0"84    gensync "^1.0.0-beta.2"85    json5 "^2.1.2"86    semver "^6.3.0"87    source-map "^0.5.0"8889"@babel/generator@^7.12.13":90  version "7.12.15"91  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.15.tgz#4617b5d0b25cc572474cc1aafee1edeaf9b5368f"92  integrity sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ==93  dependencies:94    "@babel/types" "^7.12.13"95    jsesc "^2.5.1"96    source-map "^0.5.0"9798"@babel/generator@^7.14.5", "@babel/generator@^7.7.2":99  version "7.14.5"100  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785"101  integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==102  dependencies:103    "@babel/types" "^7.14.5"104    jsesc "^2.5.1"105    source-map "^0.5.0"106107"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.12.13":108  version "7.12.13"109  resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab"110  integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==111  dependencies:112    "@babel/types" "^7.12.13"113114"@babel/helper-annotate-as-pure@^7.14.5":115  version "7.14.5"116  resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61"117  integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==118  dependencies:119    "@babel/types" "^7.14.5"120121"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5":122  version "7.14.5"123  resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191"124  integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==125  dependencies:126    "@babel/helper-explode-assignable-expression" "^7.14.5"127    "@babel/types" "^7.14.5"128129"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5":130  version "7.14.5"131  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf"132  integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==133  dependencies:134    "@babel/compat-data" "^7.14.5"135    "@babel/helper-validator-option" "^7.14.5"136    browserslist "^4.16.6"137    semver "^6.3.0"138139"@babel/helper-create-class-features-plugin@^7.14.5":140  version "7.14.5"141  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.5.tgz#8842ec495516dd1ed8f6c572be92ba78b1e9beef"142  integrity sha512-Uq9z2e7ZtcnDMirRqAGLRaLwJn+Lrh388v5ETrR3pALJnElVh2zqQmdbz4W2RUJYohAPh2mtyPUgyMHMzXMncQ==143  dependencies:144    "@babel/helper-annotate-as-pure" "^7.14.5"145    "@babel/helper-function-name" "^7.14.5"146    "@babel/helper-member-expression-to-functions" "^7.14.5"147    "@babel/helper-optimise-call-expression" "^7.14.5"148    "@babel/helper-replace-supers" "^7.14.5"149    "@babel/helper-split-export-declaration" "^7.14.5"150151"@babel/helper-create-regexp-features-plugin@^7.12.13":152  version "7.12.13"153  resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.13.tgz#0996d370a92896c612ae41a4215544bd152579c0"154  integrity sha512-XC+kiA0J3at6E85dL5UnCYfVOcIZ834QcAY0TIpgUVnz0zDzg+0TtvZTnJ4g9L1dPRGe30Qi03XCIS4tYCLtqw==155  dependencies:156    "@babel/helper-annotate-as-pure" "^7.12.13"157    regexpu-core "^4.7.1"158159"@babel/helper-create-regexp-features-plugin@^7.14.5":160  version "7.14.5"161  resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4"162  integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==163  dependencies:164    "@babel/helper-annotate-as-pure" "^7.14.5"165    regexpu-core "^4.7.1"166167"@babel/helper-define-polyfill-provider@^0.2.2":168  version "0.2.3"169  resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6"170  integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==171  dependencies:172    "@babel/helper-compilation-targets" "^7.13.0"173    "@babel/helper-module-imports" "^7.12.13"174    "@babel/helper-plugin-utils" "^7.13.0"175    "@babel/traverse" "^7.13.0"176    debug "^4.1.1"177    lodash.debounce "^4.0.8"178    resolve "^1.14.2"179    semver "^6.1.2"180181"@babel/helper-explode-assignable-expression@^7.14.5":182  version "7.14.5"183  resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645"184  integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==185  dependencies:186    "@babel/types" "^7.14.5"187188"@babel/helper-function-name@^7.12.13":189  version "7.12.13"190  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a"191  integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==192  dependencies:193    "@babel/helper-get-function-arity" "^7.12.13"194    "@babel/template" "^7.12.13"195    "@babel/types" "^7.12.13"196197"@babel/helper-function-name@^7.14.5":198  version "7.14.5"199  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4"200  integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==201  dependencies:202    "@babel/helper-get-function-arity" "^7.14.5"203    "@babel/template" "^7.14.5"204    "@babel/types" "^7.14.5"205206"@babel/helper-get-function-arity@^7.12.13":207  version "7.12.13"208  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583"209  integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==210  dependencies:211    "@babel/types" "^7.12.13"212213"@babel/helper-get-function-arity@^7.14.5":214  version "7.14.5"215  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815"216  integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==217  dependencies:218    "@babel/types" "^7.14.5"219220"@babel/helper-hoist-variables@^7.14.5":221  version "7.14.5"222  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d"223  integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==224  dependencies:225    "@babel/types" "^7.14.5"226227"@babel/helper-member-expression-to-functions@^7.12.13":228  version "7.12.13"229  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.13.tgz#c5715695b4f8bab32660dbdcdc2341dec7e3df40"230  integrity sha512-B+7nN0gIL8FZ8SvMcF+EPyB21KnCcZHQZFczCxbiNGV/O0rsrSBlWGLzmtBJ3GMjSVMIm4lpFhR+VdVBuIsUcQ==231  dependencies:232    "@babel/types" "^7.12.13"233234"@babel/helper-member-expression-to-functions@^7.14.5":235  version "7.14.5"236  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz#d5c70e4ad13b402c95156c7a53568f504e2fb7b8"237  integrity sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==238  dependencies:239    "@babel/types" "^7.14.5"240241"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13":242  version "7.12.13"243  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0"244  integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==245  dependencies:246    "@babel/types" "^7.12.13"247248"@babel/helper-module-imports@^7.14.5":249  version "7.14.5"250  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3"251  integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==252  dependencies:253    "@babel/types" "^7.14.5"254255"@babel/helper-module-transforms@^7.12.13":256  version "7.12.13"257  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.13.tgz#01afb052dcad2044289b7b20beb3fa8bd0265bea"258  integrity sha512-acKF7EjqOR67ASIlDTupwkKM1eUisNAjaSduo5Cz+793ikfnpe7p4Q7B7EWU2PCoSTPWsQkR7hRUWEIZPiVLGA==259  dependencies:260    "@babel/helper-module-imports" "^7.12.13"261    "@babel/helper-replace-supers" "^7.12.13"262    "@babel/helper-simple-access" "^7.12.13"263    "@babel/helper-split-export-declaration" "^7.12.13"264    "@babel/helper-validator-identifier" "^7.12.11"265    "@babel/template" "^7.12.13"266    "@babel/traverse" "^7.12.13"267    "@babel/types" "^7.12.13"268    lodash "^4.17.19"269270"@babel/helper-module-transforms@^7.14.5":271  version "7.14.5"272  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e"273  integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==274  dependencies:275    "@babel/helper-module-imports" "^7.14.5"276    "@babel/helper-replace-supers" "^7.14.5"277    "@babel/helper-simple-access" "^7.14.5"278    "@babel/helper-split-export-declaration" "^7.14.5"279    "@babel/helper-validator-identifier" "^7.14.5"280    "@babel/template" "^7.14.5"281    "@babel/traverse" "^7.14.5"282    "@babel/types" "^7.14.5"283284"@babel/helper-optimise-call-expression@^7.12.13":285  version "7.12.13"286  resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea"287  integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==288  dependencies:289    "@babel/types" "^7.12.13"290291"@babel/helper-optimise-call-expression@^7.14.5":292  version "7.14.5"293  resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c"294  integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==295  dependencies:296    "@babel/types" "^7.14.5"297298"@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.8.0", "@babel/helper-plugin-utils@^7.8.3":299  version "7.12.13"300  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz#174254d0f2424d8aefb4dd48057511247b0a9eeb"301  integrity sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA==302303"@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5":304  version "7.14.5"305  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9"306  integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==307308"@babel/helper-remap-async-to-generator@^7.14.5":309  version "7.14.5"310  resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6"311  integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==312  dependencies:313    "@babel/helper-annotate-as-pure" "^7.14.5"314    "@babel/helper-wrap-function" "^7.14.5"315    "@babel/types" "^7.14.5"316317"@babel/helper-replace-supers@^7.12.13":318  version "7.12.13"319  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz#00ec4fb6862546bd3d0aff9aac56074277173121"320  integrity sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg==321  dependencies:322    "@babel/helper-member-expression-to-functions" "^7.12.13"323    "@babel/helper-optimise-call-expression" "^7.12.13"324    "@babel/traverse" "^7.12.13"325    "@babel/types" "^7.12.13"326327"@babel/helper-replace-supers@^7.14.5":328  version "7.14.5"329  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94"330  integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==331  dependencies:332    "@babel/helper-member-expression-to-functions" "^7.14.5"333    "@babel/helper-optimise-call-expression" "^7.14.5"334    "@babel/traverse" "^7.14.5"335    "@babel/types" "^7.14.5"336337"@babel/helper-simple-access@^7.12.13":338  version "7.12.13"339  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4"340  integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==341  dependencies:342    "@babel/types" "^7.12.13"343344"@babel/helper-simple-access@^7.14.5":345  version "7.14.5"346  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4"347  integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==348  dependencies:349    "@babel/types" "^7.14.5"350351"@babel/helper-skip-transparent-expression-wrappers@^7.14.5":352  version "7.14.5"353  resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4"354  integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==355  dependencies:356    "@babel/types" "^7.14.5"357358"@babel/helper-split-export-declaration@^7.12.13":359  version "7.12.13"360  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05"361  integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==362  dependencies:363    "@babel/types" "^7.12.13"364365"@babel/helper-split-export-declaration@^7.14.5":366  version "7.14.5"367  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a"368  integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==369  dependencies:370    "@babel/types" "^7.14.5"371372"@babel/helper-validator-identifier@^7.12.11":373  version "7.12.11"374  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"375  integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==376377"@babel/helper-validator-identifier@^7.14.5":378  version "7.14.5"379  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8"380  integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==381382"@babel/helper-validator-option@^7.14.5":383  version "7.14.5"384  resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"385  integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==386387"@babel/helper-wrap-function@^7.14.5":388  version "7.14.5"389  resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff"390  integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==391  dependencies:392    "@babel/helper-function-name" "^7.14.5"393    "@babel/template" "^7.14.5"394    "@babel/traverse" "^7.14.5"395    "@babel/types" "^7.14.5"396397"@babel/helpers@^7.12.13":398  version "7.12.13"399  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.13.tgz#3c75e993632e4dadc0274eae219c73eb7645ba47"400  integrity sha512-oohVzLRZ3GQEk4Cjhfs9YkJA4TdIDTObdBEZGrd6F/T0GPSnuV6l22eMcxlvcvzVIPH3VTtxbseudM1zIE+rPQ==401  dependencies:402    "@babel/template" "^7.12.13"403    "@babel/traverse" "^7.12.13"404    "@babel/types" "^7.12.13"405406"@babel/helpers@^7.14.5":407  version "7.14.5"408  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.5.tgz#4870f8d9a6fdbbd65e5674a3558b4ff7fef0d9b2"409  integrity sha512-xtcWOuN9VL6nApgVHtq3PPcQv5qFBJzoSZzJ/2c0QK/IP/gxVcoWSNQwFEGvmbQsuS9rhYqjILDGGXcTkA705Q==410  dependencies:411    "@babel/template" "^7.14.5"412    "@babel/traverse" "^7.14.5"413    "@babel/types" "^7.14.5"414415"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5":416  version "7.14.5"417  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9"418  integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==419  dependencies:420    "@babel/helper-validator-identifier" "^7.14.5"421    chalk "^2.0.0"422    js-tokens "^4.0.0"423424"@babel/highlight@^7.12.13":425  version "7.12.13"426  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c"427  integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==428  dependencies:429    "@babel/helper-validator-identifier" "^7.12.11"430    chalk "^2.0.0"431    js-tokens "^4.0.0"432433"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.12.13":434  version "7.12.15"435  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.15.tgz#2b20de7f0b4b332d9b119dd9c33409c538b8aacf"436  integrity sha512-AQBOU2Z9kWwSZMd6lNjCX0GUgFonL1wAM1db8L8PMk9UDaGsRCArBkU4Sc+UCM3AE4hjbXx+h58Lb3QT4oRmrA==437438"@babel/parser@^7.14.5", "@babel/parser@^7.7.2":439  version "7.14.5"440  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.5.tgz#4cd2f346261061b2518873ffecdf1612cb032829"441  integrity sha512-TM8C+xtH/9n1qzX+JNHi7AN2zHMTiPUtspO0ZdHflW8KaskkALhMmuMHb4bCmNdv9VAPzJX3/bXqkVLnAvsPfg==442443"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5":444  version "7.14.5"445  resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e"446  integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==447  dependencies:448    "@babel/helper-plugin-utils" "^7.14.5"449    "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"450    "@babel/plugin-proposal-optional-chaining" "^7.14.5"451452"@babel/plugin-proposal-async-generator-functions@^7.14.5":453  version "7.14.5"454  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz#4024990e3dd74181f4f426ea657769ff49a2df39"455  integrity sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA==456  dependencies:457    "@babel/helper-plugin-utils" "^7.14.5"458    "@babel/helper-remap-async-to-generator" "^7.14.5"459    "@babel/plugin-syntax-async-generators" "^7.8.4"460461"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.14.5":462  version "7.14.5"463  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e"464  integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==465  dependencies:466    "@babel/helper-create-class-features-plugin" "^7.14.5"467    "@babel/helper-plugin-utils" "^7.14.5"468469"@babel/plugin-proposal-class-static-block@^7.14.5":470  version "7.14.5"471  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681"472  integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==473  dependencies:474    "@babel/helper-create-class-features-plugin" "^7.14.5"475    "@babel/helper-plugin-utils" "^7.14.5"476    "@babel/plugin-syntax-class-static-block" "^7.14.5"477478"@babel/plugin-proposal-dynamic-import@^7.14.5":479  version "7.14.5"480  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c"481  integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==482  dependencies:483    "@babel/helper-plugin-utils" "^7.14.5"484    "@babel/plugin-syntax-dynamic-import" "^7.8.3"485486"@babel/plugin-proposal-export-namespace-from@^7.14.5":487  version "7.14.5"488  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76"489  integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==490  dependencies:491    "@babel/helper-plugin-utils" "^7.14.5"492    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"493494"@babel/plugin-proposal-json-strings@^7.14.5":495  version "7.14.5"496  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb"497  integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==498  dependencies:499    "@babel/helper-plugin-utils" "^7.14.5"500    "@babel/plugin-syntax-json-strings" "^7.8.3"501502"@babel/plugin-proposal-logical-assignment-operators@^7.14.5":503  version "7.14.5"504  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738"505  integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==506  dependencies:507    "@babel/helper-plugin-utils" "^7.14.5"508    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"509510"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.2", "@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5":511  version "7.14.5"512  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6"513  integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==514  dependencies:515    "@babel/helper-plugin-utils" "^7.14.5"516    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"517518"@babel/plugin-proposal-numeric-separator@^7.14.2", "@babel/plugin-proposal-numeric-separator@^7.14.5":519  version "7.14.5"520  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18"521  integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==522  dependencies:523    "@babel/helper-plugin-utils" "^7.14.5"524    "@babel/plugin-syntax-numeric-separator" "^7.10.4"525526"@babel/plugin-proposal-object-rest-spread@^7.14.4", "@babel/plugin-proposal-object-rest-spread@^7.14.5":527  version "7.14.5"528  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz#e581d5ccdfa187ea6ed73f56c6a21c1580b90fbf"529  integrity sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A==530  dependencies:531    "@babel/compat-data" "^7.14.5"532    "@babel/helper-compilation-targets" "^7.14.5"533    "@babel/helper-plugin-utils" "^7.14.5"534    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"535    "@babel/plugin-transform-parameters" "^7.14.5"536537"@babel/plugin-proposal-optional-catch-binding@^7.14.5":538  version "7.14.5"539  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c"540  integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==541  dependencies:542    "@babel/helper-plugin-utils" "^7.14.5"543    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"544545"@babel/plugin-proposal-optional-chaining@^7.14.2", "@babel/plugin-proposal-optional-chaining@^7.14.5":546  version "7.14.5"547  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603"548  integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==549  dependencies:550    "@babel/helper-plugin-utils" "^7.14.5"551    "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"552    "@babel/plugin-syntax-optional-chaining" "^7.8.3"553554"@babel/plugin-proposal-private-methods@^7.13.0", "@babel/plugin-proposal-private-methods@^7.14.5":555  version "7.14.5"556  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d"557  integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==558  dependencies:559    "@babel/helper-create-class-features-plugin" "^7.14.5"560    "@babel/helper-plugin-utils" "^7.14.5"561562"@babel/plugin-proposal-private-property-in-object@^7.14.5":563  version "7.14.5"564  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636"565  integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==566  dependencies:567    "@babel/helper-annotate-as-pure" "^7.14.5"568    "@babel/helper-create-class-features-plugin" "^7.14.5"569    "@babel/helper-plugin-utils" "^7.14.5"570    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"571572"@babel/plugin-proposal-unicode-property-regex@^7.14.5":573  version "7.14.5"574  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8"575  integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==576  dependencies:577    "@babel/helper-create-regexp-features-plugin" "^7.14.5"578    "@babel/helper-plugin-utils" "^7.14.5"579580"@babel/plugin-proposal-unicode-property-regex@^7.4.4":581  version "7.12.13"582  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba"583  integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==584  dependencies:585    "@babel/helper-create-regexp-features-plugin" "^7.12.13"586    "@babel/helper-plugin-utils" "^7.12.13"587588"@babel/plugin-syntax-async-generators@^7.8.4":589  version "7.8.4"590  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"591  integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==592  dependencies:593    "@babel/helper-plugin-utils" "^7.8.0"594595"@babel/plugin-syntax-bigint@^7.8.3":596  version "7.8.3"597  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"598  integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==599  dependencies:600    "@babel/helper-plugin-utils" "^7.8.0"601602"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3":603  version "7.12.13"604  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"605  integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==606  dependencies:607    "@babel/helper-plugin-utils" "^7.12.13"608609"@babel/plugin-syntax-class-static-block@^7.14.5":610  version "7.14.5"611  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"612  integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==613  dependencies:614    "@babel/helper-plugin-utils" "^7.14.5"615616"@babel/plugin-syntax-dynamic-import@^7.8.3":617  version "7.8.3"618  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"619  integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==620  dependencies:621    "@babel/helper-plugin-utils" "^7.8.0"622623"@babel/plugin-syntax-export-namespace-from@^7.8.3":624  version "7.8.3"625  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"626  integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==627  dependencies:628    "@babel/helper-plugin-utils" "^7.8.3"629630"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3":631  version "7.10.4"632  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"633  integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==634  dependencies:635    "@babel/helper-plugin-utils" "^7.10.4"636637"@babel/plugin-syntax-json-strings@^7.8.3":638  version "7.8.3"639  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"640  integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==641  dependencies:642    "@babel/helper-plugin-utils" "^7.8.0"643644"@babel/plugin-syntax-jsx@^7.14.5":645  version "7.14.5"646  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201"647  integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==648  dependencies:649    "@babel/helper-plugin-utils" "^7.14.5"650651"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3":652  version "7.10.4"653  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"654  integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==655  dependencies:656    "@babel/helper-plugin-utils" "^7.10.4"657658"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":659  version "7.8.3"660  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"661  integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==662  dependencies:663    "@babel/helper-plugin-utils" "^7.8.0"664665"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3":666  version "7.10.4"667  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"668  integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==669  dependencies:670    "@babel/helper-plugin-utils" "^7.10.4"671672"@babel/plugin-syntax-object-rest-spread@^7.8.3":673  version "7.8.3"674  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"675  integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==676  dependencies:677    "@babel/helper-plugin-utils" "^7.8.0"678679"@babel/plugin-syntax-optional-catch-binding@^7.8.3":680  version "7.8.3"681  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"682  integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==683  dependencies:684    "@babel/helper-plugin-utils" "^7.8.0"685686"@babel/plugin-syntax-optional-chaining@^7.8.3":687  version "7.8.3"688  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"689  integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==690  dependencies:691    "@babel/helper-plugin-utils" "^7.8.0"692693"@babel/plugin-syntax-private-property-in-object@^7.14.5":694  version "7.14.5"695  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"696  integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==697  dependencies:698    "@babel/helper-plugin-utils" "^7.14.5"699700"@babel/plugin-syntax-top-level-await@^7.12.13", "@babel/plugin-syntax-top-level-await@^7.8.3":701  version "7.12.13"702  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178"703  integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==704  dependencies:705    "@babel/helper-plugin-utils" "^7.12.13"706707"@babel/plugin-syntax-top-level-await@^7.14.5":708  version "7.14.5"709  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"710  integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==711  dependencies:712    "@babel/helper-plugin-utils" "^7.14.5"713714"@babel/plugin-syntax-typescript@^7.14.5", "@babel/plugin-syntax-typescript@^7.7.2":715  version "7.14.5"716  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716"717  integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==718  dependencies:719    "@babel/helper-plugin-utils" "^7.14.5"720721"@babel/plugin-transform-arrow-functions@^7.14.5":722  version "7.14.5"723  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a"724  integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==725  dependencies:726    "@babel/helper-plugin-utils" "^7.14.5"727728"@babel/plugin-transform-async-to-generator@^7.14.5":729  version "7.14.5"730  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67"731  integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==732  dependencies:733    "@babel/helper-module-imports" "^7.14.5"734    "@babel/helper-plugin-utils" "^7.14.5"735    "@babel/helper-remap-async-to-generator" "^7.14.5"736737"@babel/plugin-transform-block-scoped-functions@^7.14.5":738  version "7.14.5"739  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4"740  integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==741  dependencies:742    "@babel/helper-plugin-utils" "^7.14.5"743744"@babel/plugin-transform-block-scoping@^7.14.5":745  version "7.14.5"746  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939"747  integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==748  dependencies:749    "@babel/helper-plugin-utils" "^7.14.5"750751"@babel/plugin-transform-classes@^7.14.5":752  version "7.14.5"753  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf"754  integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==755  dependencies:756    "@babel/helper-annotate-as-pure" "^7.14.5"757    "@babel/helper-function-name" "^7.14.5"758    "@babel/helper-optimise-call-expression" "^7.14.5"759    "@babel/helper-plugin-utils" "^7.14.5"760    "@babel/helper-replace-supers" "^7.14.5"761    "@babel/helper-split-export-declaration" "^7.14.5"762    globals "^11.1.0"763764"@babel/plugin-transform-computed-properties@^7.14.5":765  version "7.14.5"766  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f"767  integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==768  dependencies:769    "@babel/helper-plugin-utils" "^7.14.5"770771"@babel/plugin-transform-destructuring@^7.14.5":772  version "7.14.5"773  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz#d32ad19ff1a6da1e861dc62720d80d9776e3bf35"774  integrity sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww==775  dependencies:776    "@babel/helper-plugin-utils" "^7.14.5"777778"@babel/plugin-transform-dotall-regex@^7.14.5":779  version "7.14.5"780  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a"781  integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==782  dependencies:783    "@babel/helper-create-regexp-features-plugin" "^7.14.5"784    "@babel/helper-plugin-utils" "^7.14.5"785786"@babel/plugin-transform-dotall-regex@^7.4.4":787  version "7.12.13"788  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad"789  integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==790  dependencies:791    "@babel/helper-create-regexp-features-plugin" "^7.12.13"792    "@babel/helper-plugin-utils" "^7.12.13"793794"@babel/plugin-transform-duplicate-keys@^7.14.5":795  version "7.14.5"796  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954"797  integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==798  dependencies:799    "@babel/helper-plugin-utils" "^7.14.5"800801"@babel/plugin-transform-exponentiation-operator@^7.14.5":802  version "7.14.5"803  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493"804  integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==805  dependencies:806    "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5"807    "@babel/helper-plugin-utils" "^7.14.5"808809"@babel/plugin-transform-for-of@^7.14.5":810  version "7.14.5"811  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb"812  integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==813  dependencies:814    "@babel/helper-plugin-utils" "^7.14.5"815816"@babel/plugin-transform-function-name@^7.14.5":817  version "7.14.5"818  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2"819  integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==820  dependencies:821    "@babel/helper-function-name" "^7.14.5"822    "@babel/helper-plugin-utils" "^7.14.5"823824"@babel/plugin-transform-literals@^7.14.5":825  version "7.14.5"826  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78"827  integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==828  dependencies:829    "@babel/helper-plugin-utils" "^7.14.5"830831"@babel/plugin-transform-member-expression-literals@^7.14.5":832  version "7.14.5"833  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7"834  integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==835  dependencies:836    "@babel/helper-plugin-utils" "^7.14.5"837838"@babel/plugin-transform-modules-amd@^7.14.5":839  version "7.14.5"840  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7"841  integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==842  dependencies:843    "@babel/helper-module-transforms" "^7.14.5"844    "@babel/helper-plugin-utils" "^7.14.5"845    babel-plugin-dynamic-import-node "^2.3.3"846847"@babel/plugin-transform-modules-commonjs@^7.14.5":848  version "7.14.5"849  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97"850  integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==851  dependencies:852    "@babel/helper-module-transforms" "^7.14.5"853    "@babel/helper-plugin-utils" "^7.14.5"854    "@babel/helper-simple-access" "^7.14.5"855    babel-plugin-dynamic-import-node "^2.3.3"856857"@babel/plugin-transform-modules-systemjs@^7.14.5":858  version "7.14.5"859  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29"860  integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==861  dependencies:862    "@babel/helper-hoist-variables" "^7.14.5"863    "@babel/helper-module-transforms" "^7.14.5"864    "@babel/helper-plugin-utils" "^7.14.5"865    "@babel/helper-validator-identifier" "^7.14.5"866    babel-plugin-dynamic-import-node "^2.3.3"867868"@babel/plugin-transform-modules-umd@^7.14.5":869  version "7.14.5"870  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0"871  integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==872  dependencies:873    "@babel/helper-module-transforms" "^7.14.5"874    "@babel/helper-plugin-utils" "^7.14.5"875876"@babel/plugin-transform-named-capturing-groups-regex@^7.14.5":877  version "7.14.5"878  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz#d537e8ee083ee6f6aa4f4eef9d2081d555746e4c"879  integrity sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw==880  dependencies:881    "@babel/helper-create-regexp-features-plugin" "^7.14.5"882883"@babel/plugin-transform-new-target@^7.14.5":884  version "7.14.5"885  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8"886  integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==887  dependencies:888    "@babel/helper-plugin-utils" "^7.14.5"889890"@babel/plugin-transform-object-super@^7.14.5":891  version "7.14.5"892  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45"893  integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==894  dependencies:895    "@babel/helper-plugin-utils" "^7.14.5"896    "@babel/helper-replace-supers" "^7.14.5"897898"@babel/plugin-transform-parameters@^7.14.5":899  version "7.14.5"900  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3"901  integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==902  dependencies:903    "@babel/helper-plugin-utils" "^7.14.5"904905"@babel/plugin-transform-property-literals@^7.14.5":906  version "7.14.5"907  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34"908  integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==909  dependencies:910    "@babel/helper-plugin-utils" "^7.14.5"911912"@babel/plugin-transform-react-display-name@^7.14.5":913  version "7.14.5"914  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz#baa92d15c4570411301a85a74c13534873885b65"915  integrity sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==916  dependencies:917    "@babel/helper-plugin-utils" "^7.14.5"918919"@babel/plugin-transform-react-jsx-development@^7.14.5":920  version "7.14.5"921  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz#1a6c73e2f7ed2c42eebc3d2ad60b0c7494fcb9af"922  integrity sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==923  dependencies:924    "@babel/plugin-transform-react-jsx" "^7.14.5"925926"@babel/plugin-transform-react-jsx@^7.14.5":927  version "7.14.5"928  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz#39749f0ee1efd8a1bd729152cf5f78f1d247a44a"929  integrity sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==930  dependencies:931    "@babel/helper-annotate-as-pure" "^7.14.5"932    "@babel/helper-module-imports" "^7.14.5"933    "@babel/helper-plugin-utils" "^7.14.5"934    "@babel/plugin-syntax-jsx" "^7.14.5"935    "@babel/types" "^7.14.5"936937"@babel/plugin-transform-react-pure-annotations@^7.14.5":938  version "7.14.5"939  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz#18de612b84021e3a9802cbc212c9d9f46d0d11fc"940  integrity sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==941  dependencies:942    "@babel/helper-annotate-as-pure" "^7.14.5"943    "@babel/helper-plugin-utils" "^7.14.5"944945"@babel/plugin-transform-regenerator@^7.13.15", "@babel/plugin-transform-regenerator@^7.14.5":946  version "7.14.5"947  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f"948  integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==949  dependencies:950    regenerator-transform "^0.14.2"951952"@babel/plugin-transform-reserved-words@^7.14.5":953  version "7.14.5"954  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304"955  integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==956  dependencies:957    "@babel/helper-plugin-utils" "^7.14.5"958959"@babel/plugin-transform-runtime@^7.14.3":960  version "7.14.5"961  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz#30491dad49c6059f8f8fa5ee8896a0089e987523"962  integrity sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==963  dependencies:964    "@babel/helper-module-imports" "^7.14.5"965    "@babel/helper-plugin-utils" "^7.14.5"966    babel-plugin-polyfill-corejs2 "^0.2.2"967    babel-plugin-polyfill-corejs3 "^0.2.2"968    babel-plugin-polyfill-regenerator "^0.2.2"969    semver "^6.3.0"970971"@babel/plugin-transform-shorthand-properties@^7.14.5":972  version "7.14.5"973  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58"974  integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==975  dependencies:976    "@babel/helper-plugin-utils" "^7.14.5"977978"@babel/plugin-transform-spread@^7.14.5":979  version "7.14.5"980  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.5.tgz#bd269fb4119754d2ce7f4cc39a96b4f71baae356"981  integrity sha512-/3iqoQdiWergnShZYl0xACb4ADeYCJ7X/RgmwtXshn6cIvautRPAFzhd58frQlokLO6Jb4/3JXvmm6WNTPtiTw==982  dependencies:983    "@babel/helper-plugin-utils" "^7.14.5"984    "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"985986"@babel/plugin-transform-sticky-regex@^7.14.5":987  version "7.14.5"988  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9"989  integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==990  dependencies:991    "@babel/helper-plugin-utils" "^7.14.5"992993"@babel/plugin-transform-template-literals@^7.14.5":994  version "7.14.5"995  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93"996  integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==997  dependencies:998    "@babel/helper-plugin-utils" "^7.14.5"9991000"@babel/plugin-transform-typeof-symbol@^7.14.5":1001  version "7.14.5"1002  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4"1003  integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==1004  dependencies:1005    "@babel/helper-plugin-utils" "^7.14.5"10061007"@babel/plugin-transform-typescript@^7.14.5":1008  version "7.14.5"1009  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.5.tgz#5b41b59072f765bd1ec1d0b694e08c7df0f6f8a0"1010  integrity sha512-cFD5PKp4b8/KkwQ7h71FdPXFvz1RgwTFF9akRZwFldb9G0AHf7CgoPx96c4Q/ZVjh6V81tqQwW5YiHws16OzPg==1011  dependencies:1012    "@babel/helper-create-class-features-plugin" "^7.14.5"1013    "@babel/helper-plugin-utils" "^7.14.5"1014    "@babel/plugin-syntax-typescript" "^7.14.5"10151016"@babel/plugin-transform-unicode-escapes@^7.14.5":1017  version "7.14.5"1018  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b"1019  integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==1020  dependencies:1021    "@babel/helper-plugin-utils" "^7.14.5"10221023"@babel/plugin-transform-unicode-regex@^7.14.5":1024  version "7.14.5"1025  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e"1026  integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==1027  dependencies:1028    "@babel/helper-create-regexp-features-plugin" "^7.14.5"1029    "@babel/helper-plugin-utils" "^7.14.5"10301031"@babel/preset-env@^7.14.4":1032  version "7.14.5"1033  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.5.tgz#c0c84e763661fd0e74292c3d511cb33b0c668997"1034  integrity sha512-ci6TsS0bjrdPpWGnQ+m4f+JSSzDKlckqKIJJt9UZ/+g7Zz9k0N8lYU8IeLg/01o2h8LyNZDMLGgRLDTxpudLsA==1035  dependencies:1036    "@babel/compat-data" "^7.14.5"1037    "@babel/helper-compilation-targets" "^7.14.5"1038    "@babel/helper-plugin-utils" "^7.14.5"1039    "@babel/helper-validator-option" "^7.14.5"1040    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5"1041    "@babel/plugin-proposal-async-generator-functions" "^7.14.5"1042    "@babel/plugin-proposal-class-properties" "^7.14.5"1043    "@babel/plugin-proposal-class-static-block" "^7.14.5"1044    "@babel/plugin-proposal-dynamic-import" "^7.14.5"1045    "@babel/plugin-proposal-export-namespace-from" "^7.14.5"1046    "@babel/plugin-proposal-json-strings" "^7.14.5"1047    "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5"1048    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5"1049    "@babel/plugin-proposal-numeric-separator" "^7.14.5"1050    "@babel/plugin-proposal-object-rest-spread" "^7.14.5"1051    "@babel/plugin-proposal-optional-catch-binding" "^7.14.5"1052    "@babel/plugin-proposal-optional-chaining" "^7.14.5"1053    "@babel/plugin-proposal-private-methods" "^7.14.5"1054    "@babel/plugin-proposal-private-property-in-object" "^7.14.5"1055    "@babel/plugin-proposal-unicode-property-regex" "^7.14.5"1056    "@babel/plugin-syntax-async-generators" "^7.8.4"1057    "@babel/plugin-syntax-class-properties" "^7.12.13"1058    "@babel/plugin-syntax-class-static-block" "^7.14.5"1059    "@babel/plugin-syntax-dynamic-import" "^7.8.3"1060    "@babel/plugin-syntax-export-namespace-from" "^7.8.3"1061    "@babel/plugin-syntax-json-strings" "^7.8.3"1062    "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"1063    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"1064    "@babel/plugin-syntax-numeric-separator" "^7.10.4"1065    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"1066    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"1067    "@babel/plugin-syntax-optional-chaining" "^7.8.3"1068    "@babel/plugin-syntax-private-property-in-object" "^7.14.5"1069    "@babel/plugin-syntax-top-level-await" "^7.14.5"1070    "@babel/plugin-transform-arrow-functions" "^7.14.5"1071    "@babel/plugin-transform-async-to-generator" "^7.14.5"1072    "@babel/plugin-transform-block-scoped-functions" "^7.14.5"1073    "@babel/plugin-transform-block-scoping" "^7.14.5"1074    "@babel/plugin-transform-classes" "^7.14.5"1075    "@babel/plugin-transform-computed-properties" "^7.14.5"1076    "@babel/plugin-transform-destructuring" "^7.14.5"1077    "@babel/plugin-transform-dotall-regex" "^7.14.5"1078    "@babel/plugin-transform-duplicate-keys" "^7.14.5"1079    "@babel/plugin-transform-exponentiation-operator" "^7.14.5"1080    "@babel/plugin-transform-for-of" "^7.14.5"1081    "@babel/plugin-transform-function-name" "^7.14.5"1082    "@babel/plugin-transform-literals" "^7.14.5"1083    "@babel/plugin-transform-member-expression-literals" "^7.14.5"1084    "@babel/plugin-transform-modules-amd" "^7.14.5"1085    "@babel/plugin-transform-modules-commonjs" "^7.14.5"1086    "@babel/plugin-transform-modules-systemjs" "^7.14.5"1087    "@babel/plugin-transform-modules-umd" "^7.14.5"1088    "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.5"1089    "@babel/plugin-transform-new-target" "^7.14.5"1090    "@babel/plugin-transform-object-super" "^7.14.5"1091    "@babel/plugin-transform-parameters" "^7.14.5"1092    "@babel/plugin-transform-property-literals" "^7.14.5"1093    "@babel/plugin-transform-regenerator" "^7.14.5"1094    "@babel/plugin-transform-reserved-words" "^7.14.5"1095    "@babel/plugin-transform-shorthand-properties" "^7.14.5"1096    "@babel/plugin-transform-spread" "^7.14.5"1097    "@babel/plugin-transform-sticky-regex" "^7.14.5"1098    "@babel/plugin-transform-template-literals" "^7.14.5"1099    "@babel/plugin-transform-typeof-symbol" "^7.14.5"1100    "@babel/plugin-transform-unicode-escapes" "^7.14.5"1101    "@babel/plugin-transform-unicode-regex" "^7.14.5"1102    "@babel/preset-modules" "^0.1.4"1103    "@babel/types" "^7.14.5"1104    babel-plugin-polyfill-corejs2 "^0.2.2"1105    babel-plugin-polyfill-corejs3 "^0.2.2"1106    babel-plugin-polyfill-regenerator "^0.2.2"1107    core-js-compat "^3.14.0"1108    semver "^6.3.0"11091110"@babel/preset-modules@^0.1.4":1111  version "0.1.4"1112  resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e"1113  integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==1114  dependencies:1115    "@babel/helper-plugin-utils" "^7.0.0"1116    "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"1117    "@babel/plugin-transform-dotall-regex" "^7.4.4"1118    "@babel/types" "^7.4.4"1119    esutils "^2.0.2"11201121"@babel/preset-react@^7.13.13":1122  version "7.14.5"1123  resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c"1124  integrity sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==1125  dependencies:1126    "@babel/helper-plugin-utils" "^7.14.5"1127    "@babel/helper-validator-option" "^7.14.5"1128    "@babel/plugin-transform-react-display-name" "^7.14.5"1129    "@babel/plugin-transform-react-jsx" "^7.14.5"1130    "@babel/plugin-transform-react-jsx-development" "^7.14.5"1131    "@babel/plugin-transform-react-pure-annotations" "^7.14.5"11321133"@babel/preset-typescript@^7.13.0":1134  version "7.14.5"1135  resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz#aa98de119cf9852b79511f19e7f44a2d379bcce0"1136  integrity sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==1137  dependencies:1138    "@babel/helper-plugin-utils" "^7.14.5"1139    "@babel/helper-validator-option" "^7.14.5"1140    "@babel/plugin-transform-typescript" "^7.14.5"11411142"@babel/register@^7.13.16":1143  version "7.14.5"1144  resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.14.5.tgz#d0eac615065d9c2f1995842f85d6e56c345f3233"1145  integrity sha512-TjJpGz/aDjFGWsItRBQMOFTrmTI9tr79CHOK+KIvLeCkbxuOAk2M5QHjvruIMGoo9OuccMh5euplPzc5FjAKGg==1146  dependencies:1147    clone-deep "^4.0.1"1148    find-cache-dir "^2.0.0"1149    make-dir "^2.1.0"1150    pirates "^4.0.0"1151    source-map-support "^0.5.16"11521153"@babel/runtime@^7.13.9", "@babel/runtime@^7.14.0":1154  version "7.14.5"1155  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.5.tgz#665450911c6031af38f81db530f387ec04cd9a98"1156  integrity sha512-121rumjddw9c3NCQ55KGkyE1h/nzWhU/owjhw0l4mQrkzz4x9SGS1X8gFLraHwX7td3Yo4QTL+qj0NcIzN87BA==1157  dependencies:1158    regenerator-runtime "^0.13.4"11591160"@babel/runtime@^7.8.4":1161  version "7.12.13"1162  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.13.tgz#0a21452352b02542db0ffb928ac2d3ca7cb6d66d"1163  integrity sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==1164  dependencies:1165    regenerator-runtime "^0.13.4"11661167"@babel/template@^7.12.13", "@babel/template@^7.3.3":1168  version "7.12.13"1169  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327"1170  integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==1171  dependencies:1172    "@babel/code-frame" "^7.12.13"1173    "@babel/parser" "^7.12.13"1174    "@babel/types" "^7.12.13"11751176"@babel/template@^7.14.5":1177  version "7.14.5"1178  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4"1179  integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==1180  dependencies:1181    "@babel/code-frame" "^7.14.5"1182    "@babel/parser" "^7.14.5"1183    "@babel/types" "^7.14.5"11841185"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.13":1186  version "7.12.13"1187  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.13.tgz#689f0e4b4c08587ad26622832632735fb8c4e0c0"1188  integrity sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA==1189  dependencies:1190    "@babel/code-frame" "^7.12.13"1191    "@babel/generator" "^7.12.13"1192    "@babel/helper-function-name" "^7.12.13"1193    "@babel/helper-split-export-declaration" "^7.12.13"1194    "@babel/parser" "^7.12.13"1195    "@babel/types" "^7.12.13"1196    debug "^4.1.0"1197    globals "^11.1.0"1198    lodash "^4.17.19"11991200"@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.7.2":1201  version "7.14.5"1202  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.5.tgz#c111b0f58afab4fea3d3385a406f692748c59870"1203  integrity sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==1204  dependencies:1205    "@babel/code-frame" "^7.14.5"1206    "@babel/generator" "^7.14.5"1207    "@babel/helper-function-name" "^7.14.5"1208    "@babel/helper-hoist-variables" "^7.14.5"1209    "@babel/helper-split-export-declaration" "^7.14.5"1210    "@babel/parser" "^7.14.5"1211    "@babel/types" "^7.14.5"1212    debug "^4.1.0"1213    globals "^11.1.0"12141215"@babel/types@^7.0.0", "@babel/types@^7.12.13", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":1216  version "7.12.13"1217  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.13.tgz#8be1aa8f2c876da11a9cf650c0ecf656913ad611"1218  integrity sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==1219  dependencies:1220    "@babel/helper-validator-identifier" "^7.12.11"1221    lodash "^4.17.19"1222    to-fast-properties "^2.0.0"12231224"@babel/types@^7.14.5":1225  version "7.14.5"1226  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff"1227  integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==1228  dependencies:1229    "@babel/helper-validator-identifier" "^7.14.5"1230    to-fast-properties "^2.0.0"12311232"@bcoe/v8-coverage@^0.2.3":1233  version "0.2.3"1234  resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"1235  integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==12361237"@eslint/eslintrc@^0.4.2":1238  version "0.4.2"1239  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179"1240  integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==1241  dependencies:1242    ajv "^6.12.4"1243    debug "^4.1.1"1244    espree "^7.3.0"1245    globals "^13.9.0"1246    ignore "^4.0.6"1247    import-fresh "^3.2.1"1248    js-yaml "^3.13.1"1249    minimatch "^3.0.4"1250    strip-json-comments "^3.1.1"12511252"@istanbuljs/load-nyc-config@^1.0.0":1253  version "1.1.0"1254  resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"1255  integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==1256  dependencies:1257    camelcase "^5.3.1"1258    find-up "^4.1.0"1259    get-package-type "^0.1.0"1260    js-yaml "^3.13.1"1261    resolve-from "^5.0.0"12621263"@istanbuljs/schema@^0.1.2":1264  version "0.1.2"1265  resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd"1266  integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==12671268"@jest/console@^27.0.2":1269  version "27.0.2"1270  resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.0.2.tgz#b8eeff8f21ac51d224c851e1729d2630c18631e6"1271  integrity sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w==1272  dependencies:1273    "@jest/types" "^27.0.2"1274    "@types/node" "*"1275    chalk "^4.0.0"1276    jest-message-util "^27.0.2"1277    jest-util "^27.0.2"1278    slash "^3.0.0"12791280"@jest/core@^27.0.4":1281  version "27.0.4"1282  resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.0.4.tgz#679bf9ac07900da2ddbb9667bb1afa8029038f53"1283  integrity sha512-+dsmV8VUs1h/Szb+rEWk8xBM1fp1I///uFy9nk3wXGvRsF2lBp8EVPmtWc+QFRb3MY2b7u2HbkGF1fzoDzQTLA==1284  dependencies:1285    "@jest/console" "^27.0.2"1286    "@jest/reporters" "^27.0.4"1287    "@jest/test-result" "^27.0.2"1288    "@jest/transform" "^27.0.2"1289    "@jest/types" "^27.0.2"1290    "@types/node" "*"1291    ansi-escapes "^4.2.1"1292    chalk "^4.0.0"1293    emittery "^0.8.1"1294    exit "^0.1.2"1295    graceful-fs "^4.2.4"1296    jest-changed-files "^27.0.2"1297    jest-config "^27.0.4"1298    jest-haste-map "^27.0.2"1299    jest-message-util "^27.0.2"1300    jest-regex-util "^27.0.1"1301    jest-resolve "^27.0.4"1302    jest-resolve-dependencies "^27.0.4"1303    jest-runner "^27.0.4"1304    jest-runtime "^27.0.4"1305    jest-snapshot "^27.0.4"1306    jest-util "^27.0.2"1307    jest-validate "^27.0.2"1308    jest-watcher "^27.0.2"1309    micromatch "^4.0.4"1310    p-each-series "^2.1.0"1311    rimraf "^3.0.0"1312    slash "^3.0.0"1313    strip-ansi "^6.0.0"13141315"@jest/environment@^27.0.3":1316  version "27.0.3"1317  resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.0.3.tgz#68769b1dfdd213e3456169d64fbe9bd63a5fda92"1318  integrity sha512-pN9m7fbKsop5vc3FOfH8NF7CKKdRbEZzcxfIo1n2TT6ucKWLFq0P6gCJH0GpnQp036++yY9utHOxpeT1WnkWTA==1319  dependencies:1320    "@jest/fake-timers" "^27.0.3"1321    "@jest/types" "^27.0.2"1322    "@types/node" "*"1323    jest-mock "^27.0.3"13241325"@jest/fake-timers@^27.0.3":1326  version "27.0.3"1327  resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.0.3.tgz#9899ba6304cc636734c74478df502e18136461dd"1328  integrity sha512-fQ+UCKRIYKvTCEOyKPnaPnomLATIhMnHC/xPZ7yT1Uldp7yMgMxoYIFidDbpSTgB79+/U+FgfoD30c6wg3IUjA==1329  dependencies:1330    "@jest/types" "^27.0.2"1331    "@sinonjs/fake-timers" "^7.0.2"1332    "@types/node" "*"1333    jest-message-util "^27.0.2"1334    jest-mock "^27.0.3"1335    jest-util "^27.0.2"13361337"@jest/globals@^27.0.3":1338  version "27.0.3"1339  resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.0.3.tgz#1cf8933b7791bba0b99305cbf39fd4d2e3fe4060"1340  integrity sha512-OzsIuf7uf+QalqAGbjClyezzEcLQkdZ+7PejUrZgDs+okdAK8GwRCGcYCirHvhMBBQh60Jr3NlIGbn/KBPQLEQ==1341  dependencies:1342    "@jest/environment" "^27.0.3"1343    "@jest/types" "^27.0.2"1344    expect "^27.0.2"13451346"@jest/reporters@^27.0.4":1347  version "27.0.4"1348  resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.0.4.tgz#95609b1be97afb80d55d8aa3d7c3179c15810e65"1349  integrity sha512-Xa90Nm3JnV0xCe4M6A10M9WuN9krb+WFKxV1A98Y4ePCw40n++r7uxFUNU7DT1i9Behj7fjrAIju9oU0t1QtCg==1350  dependencies:1351    "@bcoe/v8-coverage" "^0.2.3"1352    "@jest/console" "^27.0.2"1353    "@jest/test-result" "^27.0.2"1354    "@jest/transform" "^27.0.2"1355    "@jest/types" "^27.0.2"1356    chalk "^4.0.0"1357    collect-v8-coverage "^1.0.0"1358    exit "^0.1.2"1359    glob "^7.1.2"1360    graceful-fs "^4.2.4"1361    istanbul-lib-coverage "^3.0.0"1362    istanbul-lib-instrument "^4.0.3"1363    istanbul-lib-report "^3.0.0"1364    istanbul-lib-source-maps "^4.0.0"1365    istanbul-reports "^3.0.2"1366    jest-haste-map "^27.0.2"1367    jest-resolve "^27.0.4"1368    jest-util "^27.0.2"1369    jest-worker "^27.0.2"1370    slash "^3.0.0"1371    source-map "^0.6.0"1372    string-length "^4.0.1"1373    terminal-link "^2.0.0"1374    v8-to-istanbul "^7.0.0"13751376"@jest/source-map@^27.0.1":1377  version "27.0.1"1378  resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.1.tgz#2afbf73ddbaddcb920a8e62d0238a0a9e0a8d3e4"1379  integrity sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==1380  dependencies:1381    callsites "^3.0.0"1382    graceful-fs "^4.2.4"1383    source-map "^0.6.0"13841385"@jest/test-result@^27.0.2":1386  version "27.0.2"1387  resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.0.2.tgz#0451049e32ceb609b636004ccc27c8fa22263f10"1388  integrity sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA==1389  dependencies:1390    "@jest/console" "^27.0.2"1391    "@jest/types" "^27.0.2"1392    "@types/istanbul-lib-coverage" "^2.0.0"1393    collect-v8-coverage "^1.0.0"13941395"@jest/test-sequencer@^27.0.4":1396  version "27.0.4"1397  resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.0.4.tgz#976493b277594d81e589896f0ed21f198308928a"1398  integrity sha512-6UFEVwdmxYdyNffBxVVZxmXEdBE4riSddXYSnFNH0ELFQFk/bvagizim8WfgJTqF4EKd+j1yFxvhb8BMHfOjSQ==1399  dependencies:1400    "@jest/test-result" "^27.0.2"1401    graceful-fs "^4.2.4"1402    jest-haste-map "^27.0.2"1403    jest-runtime "^27.0.4"14041405"@jest/transform@^27.0.2":1406  version "27.0.2"1407  resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.2.tgz#b073b7c589e3f4b842102468875def2bb722d6b5"1408  integrity sha512-H8sqKlgtDfVog/s9I4GG2XMbi4Ar7RBxjsKQDUhn2XHAi3NG+GoQwWMER+YfantzExbjNqQvqBHzo/G2pfTiPw==1409  dependencies:1410    "@babel/core" "^7.1.0"1411    "@jest/types" "^27.0.2"1412    babel-plugin-istanbul "^6.0.0"1413    chalk "^4.0.0"1414    convert-source-map "^1.4.0"1415    fast-json-stable-stringify "^2.0.0"1416    graceful-fs "^4.2.4"1417    jest-haste-map "^27.0.2"1418    jest-regex-util "^27.0.1"1419    jest-util "^27.0.2"1420    micromatch "^4.0.4"1421    pirates "^4.0.1"1422    slash "^3.0.0"1423    source-map "^0.6.1"1424    write-file-atomic "^3.0.0"14251426"@jest/types@^27.0.2":1427  version "27.0.2"1428  resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.2.tgz#e153d6c46bda0f2589f0702b071f9898c7bbd37e"1429  integrity sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==1430  dependencies:1431    "@types/istanbul-lib-coverage" "^2.0.0"1432    "@types/istanbul-reports" "^3.0.0"1433    "@types/node" "*"1434    "@types/yargs" "^16.0.0"1435    chalk "^4.0.0"14361437"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.2":1438  version "2.1.8-no-fsevents.2"1439  resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.2.tgz#e324c0a247a5567192dd7180647709d7e2faf94b"1440  integrity sha512-Fb8WxUFOBQVl+CX4MWet5o7eCc6Pj04rXIwVKZ6h1NnqTo45eOQW6aWyhG25NIODvWFwTDMwBsYxrQ3imxpetg==1441  dependencies:1442    anymatch "^2.0.0"1443    async-each "^1.0.1"1444    braces "^2.3.2"1445    glob-parent "^5.1.2"1446    inherits "^2.0.3"1447    is-binary-path "^1.0.0"1448    is-glob "^4.0.0"1449    normalize-path "^3.0.0"1450    path-is-absolute "^1.0.0"1451    readdirp "^2.2.1"1452    upath "^1.1.1"14531454"@nodelib/fs.scandir@2.1.4":1455  version "2.1.4"1456  resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69"1457  integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==1458  dependencies:1459    "@nodelib/fs.stat" "2.0.4"1460    run-parallel "^1.1.9"14611462"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2":1463  version "2.0.4"1464  resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655"1465  integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==14661467"@nodelib/fs.walk@^1.2.3":1468  version "1.2.6"1469  resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063"1470  integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==1471  dependencies:1472    "@nodelib/fs.scandir" "2.1.4"1473    fastq "^1.6.0"14741475"@octokit/auth-token@^2.4.4":1476  version "2.4.5"1477  resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3"1478  integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==1479  dependencies:1480    "@octokit/types" "^6.0.3"14811482"@octokit/core@^3.2.3":1483  version "3.2.5"1484  resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.2.5.tgz#57becbd5fd789b0592b915840855f3a5f233d554"1485  integrity sha512-+DCtPykGnvXKWWQI0E1XD+CCeWSBhB6kwItXqfFmNBlIlhczuDPbg+P6BtLnVBaRJDAjv+1mrUJuRsFSjktopg==1486  dependencies:1487    "@octokit/auth-token" "^2.4.4"1488    "@octokit/graphql" "^4.5.8"1489    "@octokit/request" "^5.4.12"1490    "@octokit/types" "^6.0.3"1491    before-after-hook "^2.1.0"1492    universal-user-agent "^6.0.0"14931494"@octokit/endpoint@^6.0.1":1495  version "6.0.11"1496  resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.11.tgz#082adc2aebca6dcefa1fb383f5efb3ed081949d1"1497  integrity sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ==1498  dependencies:1499    "@octokit/types" "^6.0.3"1500    is-plain-object "^5.0.0"1501    universal-user-agent "^6.0.0"15021503"@octokit/graphql@^4.5.8":1504  version "4.6.0"1505  resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.0.tgz#f9abca55f82183964a33439d5264674c701c3327"1506  integrity sha512-CJ6n7izLFXLvPZaWzCQDjU/RP+vHiZmWdOunaCS87v+2jxMsW9FB5ktfIxybRBxZjxuJGRnxk7xJecWTVxFUYQ==1507  dependencies:1508    "@octokit/request" "^5.3.0"1509    "@octokit/types" "^6.0.3"1510    universal-user-agent "^6.0.0"15111512"@octokit/openapi-types@^4.0.2":1513  version "4.0.2"1514  resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-4.0.2.tgz#4b2bb553a16ab9e0fdeb29bd453b1c88cf129929"1515  integrity sha512-quqmeGTjcVks8YaatVGCpt7QpUTs2PK0D3mW5aEQqmFKOuIZ/CxwWrgnggPjqP3CNp6eALdQRgf0jUpcG8X1/Q==15161517"@octokit/plugin-paginate-rest@^2.6.2":1518  version "2.9.1"1519  resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.9.1.tgz#e9bb34a89b7ed5b801f1c976feeb9b0078ecd201"1520  integrity sha512-8wnuWGjwDIEobbBet2xAjZwgiMVTgIer5wBsnGXzV3lJ4yqphLU2FEMpkhSrDx7y+WkZDfZ+V+1cFMZ1mAaFag==1521  dependencies:1522    "@octokit/types" "^6.8.0"15231524"@octokit/plugin-request-log@^1.0.2":1525  version "1.0.3"1526  resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.3.tgz#70a62be213e1edc04bb8897ee48c311482f9700d"1527  integrity sha512-4RFU4li238jMJAzLgAwkBAw+4Loile5haQMQr+uhFq27BmyJXcXSKvoQKqh0agsZEiUlW6iSv3FAgvmGkur7OQ==15281529"@octokit/plugin-rest-endpoint-methods@4.10.1":1530  version "4.10.1"1531  resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.10.1.tgz#b7a9181d1f52fef70a13945c5b49cffa51862da1"1532  integrity sha512-YGMiEidTORzgUmYZu0eH4q2k8kgQSHQMuBOBYiKxUYs/nXea4q/Ze6tDzjcRAPmHNJYXrENs1bEMlcdGKT+8ug==1533  dependencies:1534    "@octokit/types" "^6.8.2"1535    deprecation "^2.3.1"15361537"@octokit/request-error@^2.0.0":1538  version "2.0.5"1539  resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.5.tgz#72cc91edc870281ad583a42619256b380c600143"1540  integrity sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg==1541  dependencies:1542    "@octokit/types" "^6.0.3"1543    deprecation "^2.0.0"1544    once "^1.4.0"15451546"@octokit/request@^5.3.0", "@octokit/request@^5.4.12":1547  version "5.4.14"1548  resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.14.tgz#ec5f96f78333bb2af390afa5ff66f114b063bc96"1549  integrity sha512-VkmtacOIQp9daSnBmDI92xNIeLuSRDOIuplp/CJomkvzt7M18NXgG044Cx/LFKLgjKt9T2tZR6AtJayba9GTSA==1550  dependencies:1551    "@octokit/endpoint" "^6.0.1"1552    "@octokit/request-error" "^2.0.0"1553    "@octokit/types" "^6.7.1"1554    deprecation "^2.0.0"1555    is-plain-object "^5.0.0"1556    node-fetch "^2.6.1"1557    once "^1.4.0"1558    universal-user-agent "^6.0.0"15591560"@octokit/rest@^18.0.9":1561  version "18.1.0"1562  resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.1.0.tgz#9bf72604911a3433165bcc924263c9a706d32804"1563  integrity sha512-YQfpTzWV3jdzDPyXQVO54f5I2t1zxk/S53Vbe+Aa5vQj6MdTx6sNEWzmUzUO8lSVowbGOnjcQHzW1A8ATr+/7g==1564  dependencies:1565    "@octokit/core" "^3.2.3"1566    "@octokit/plugin-paginate-rest" "^2.6.2"1567    "@octokit/plugin-request-log" "^1.0.2"1568    "@octokit/plugin-rest-endpoint-methods" "4.10.1"15691570"@octokit/types@^6.0.3", "@octokit/types@^6.7.1", "@octokit/types@^6.8.0", "@octokit/types@^6.8.2":1571  version "6.8.3"1572  resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.8.3.tgz#1960951103c836ab2e55fe47a8da2bf76402824f"1573  integrity sha512-ZNAy8z77ewKZ5LCX0KaUm4tWdgloWQ6FWJCh06qgahq/MH13sQefIPKSo0dBdPU3bcioltyZUcC0k8oHHfjvnQ==1574  dependencies:1575    "@octokit/openapi-types" "^4.0.2"1576    "@types/node" ">= 8"15771578"@polkadot/api-contract@4.13.2-5":1579  version "4.13.2-5"1580  resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-4.13.2-5.tgz#631bb9c3f46b65001c584a66236488ecda4b41d9"1581  integrity sha512-JaPINL/EtQefmlewC/DmtMy470ERgelKv8vnnd0rrKVf+dVXSFn6PQFxIqIGBohpxVeFruiuPwhCw3ovxbBvGw==1582  dependencies:1583    "@babel/runtime" "^7.14.0"1584    "@polkadot/api" "4.13.2-5"1585    "@polkadot/types" "4.13.2-5"1586    "@polkadot/util" "^6.7.1"1587    "@polkadot/x-rxjs" "^6.7.1"1588    bn.js "^4.11.9"15891590"@polkadot/api-derive@4.13.2-5":1591  version "4.13.2-5"1592  resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-4.13.2-5.tgz#8e0d42db22c1a4649b790dc3aabb4cfa34491621"1593  integrity sha512-8L8UcSEpo1S9l/iHIzEJUo3RGeL4Rezo9dAOk3yuqc25NKIT5/aiKhqb0JKpcJh9GsHbQANyYCiey+VZGqZfmA==1594  dependencies:1595    "@babel/runtime" "^7.14.0"1596    "@polkadot/api" "4.13.2-5"1597    "@polkadot/rpc-core" "4.13.2-5"1598    "@polkadot/types" "4.13.2-5"1599    "@polkadot/util" "^6.7.1"1600    "@polkadot/util-crypto" "^6.7.1"1601    "@polkadot/x-rxjs" "^6.7.1"1602    bn.js "^4.11.9"16031604"@polkadot/api@4.13.2-5":1605  version "4.13.2-5"1606  resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-4.13.2-5.tgz#cf6e3a4baa0054ec580422a5dc544161e19d924a"1607  integrity sha512-7WfnKk7rqO7V001Vm6EcXBS9ZWd9oxvwbPQ3oAMhGOyKWfL+8lLo0FrAnS66LZo7FAmLNEvaJ6b4BnYub0sd0w==1608  dependencies:1609    "@babel/runtime" "^7.14.0"1610    "@polkadot/api-derive" "4.13.2-5"1611    "@polkadot/keyring" "^6.7.1"1612    "@polkadot/metadata" "4.13.2-5"1613    "@polkadot/rpc-core" "4.13.2-5"1614    "@polkadot/rpc-provider" "4.13.2-5"1615    "@polkadot/types" "4.13.2-5"1616    "@polkadot/types-known" "4.13.2-5"1617    "@polkadot/util" "^6.7.1"1618    "@polkadot/util-crypto" "^6.7.1"1619    "@polkadot/x-rxjs" "^6.7.1"1620    bn.js "^4.11.9"1621    eventemitter3 "^4.0.7"16221623"@polkadot/dev@0.62.41":1624  version "0.62.41"1625  resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.62.41.tgz#655345c0d4916eb669d4865d077f44cdffa6407e"1626  integrity sha512-fqpA1ujdRLHzOf+tZ/RJRbcoKgjlC44zVXAeQHCA5wrEhqHIy/TqE/djxb+XzviHcwmucfGAe+wKOf4f4RdJoQ==1627  dependencies:1628    "@babel/cli" "^7.14.3"1629    "@babel/core" "^7.14.3"1630    "@babel/plugin-proposal-class-properties" "^7.13.0"1631    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.2"1632    "@babel/plugin-proposal-numeric-separator" "^7.14.2"1633    "@babel/plugin-proposal-object-rest-spread" "^7.14.4"1634    "@babel/plugin-proposal-optional-chaining" "^7.14.2"1635    "@babel/plugin-proposal-private-methods" "^7.13.0"1636    "@babel/plugin-syntax-bigint" "^7.8.3"1637    "@babel/plugin-syntax-dynamic-import" "^7.8.3"1638    "@babel/plugin-syntax-import-meta" "^7.10.4"1639    "@babel/plugin-syntax-top-level-await" "^7.12.13"1640    "@babel/plugin-transform-regenerator" "^7.13.15"1641    "@babel/plugin-transform-runtime" "^7.14.3"1642    "@babel/preset-env" "^7.14.4"1643    "@babel/preset-react" "^7.13.13"1644    "@babel/preset-typescript" "^7.13.0"1645    "@babel/register" "^7.13.16"1646    "@babel/runtime" "^7.14.0"1647    "@rushstack/eslint-patch" "^1.0.6"1648    "@typescript-eslint/eslint-plugin" "4.26.0"1649    "@typescript-eslint/parser" "4.26.0"1650    "@vue/component-compiler-utils" "^3.2.0"1651    babel-jest "^27.0.2"1652    babel-plugin-module-extension-resolver "^1.0.0-rc.2"1653    babel-plugin-module-resolver "^4.1.0"1654    babel-plugin-styled-components "^1.12.0"1655    browserslist "^4.16.6"1656    chalk "^4.1.1"1657    coveralls "^3.1.0"1658    eslint "^7.27.0"1659    eslint-config-standard "^16.0.3"1660    eslint-import-resolver-node "^0.3.4"1661    eslint-plugin-header "^3.1.1"1662    eslint-plugin-import "^2.23.4"1663    eslint-plugin-node "^11.1.0"1664    eslint-plugin-promise "^5.1.0"1665    eslint-plugin-react "^7.24.0"1666    eslint-plugin-react-hooks "^4.2.0"1667    eslint-plugin-simple-import-sort "^7.0.0"1668    eslint-plugin-sort-destructure-keys "^1.3.5"1669    fs-extra "^10.0.0"1670    gh-pages "^3.2.0"1671    gh-release "^6.0.0"1672    glob "^7.1.7"1673    glob2base "^0.0.12"1674    jest "^27.0.4"1675    jest-cli "^27.0.4"1676    jest-config "^27.0.4"1677    jest-haste-map "^27.0.2"1678    jest-resolve "^27.0.4"1679    madge "^4.0.2"1680    minimatch "^3.0.4"1681    mkdirp "^1.0.4"1682    prettier "^2.3.0"1683    rimraf "^3.0.2"1684    typescript "^4.3.2"1685    yargs "^17.0.1"16861687"@polkadot/keyring@^6.7.1":1688  version "6.7.1"1689  resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-6.7.1.tgz#6827ff42ace7eb2b78b35641cc9595ace69d598a"1690  integrity sha512-SdIsKAL/iS1bJG4zVkB6khBUcbty4qt4K44mZBbI5xf7kPe7kRTnbqf/n+wdtA1P3eiQGygVNDPDLa7FncmEig==1691  dependencies:1692    "@babel/runtime" "^7.14.0"1693    "@polkadot/util" "6.7.1"1694    "@polkadot/util-crypto" "6.7.1"16951696"@polkadot/metadata@4.13.2-5":1697  version "4.13.2-5"1698  resolved "https://registry.yarnpkg.com/@polkadot/metadata/-/metadata-4.13.2-5.tgz#50a24d21df1d1160ef25237fdceaf3cd63766eb9"1699  integrity sha512-fkGqyh7cIDKqFllQUAxVaadih/KdZuZf5QmXcES9qtqrPZ9e9vJA04wfG08ggGN/aK09gXO6zX/ycQP6FwoGhw==1700  dependencies:1701    "@babel/runtime" "^7.14.0"1702    "@polkadot/types" "4.13.2-5"1703    "@polkadot/types-known" "4.13.2-5"1704    "@polkadot/util" "^6.7.1"1705    "@polkadot/util-crypto" "^6.7.1"1706    bn.js "^4.11.9"17071708"@polkadot/networks@6.7.1", "@polkadot/networks@^6.7.1":1709  version "6.7.1"1710  resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-6.7.1.tgz#7100b15f2f1e678aa5567afbe0c1ca1c690b9c83"1711  integrity sha512-9A2GX9Wyc6yoqRGjuxHAEDntsoiCJ9Jv9oocbmTF6/wVb3lK1Si0p4nLfsNCtIYXibbYP2jkyMj5rP10bY3bgw==1712  dependencies:1713    "@babel/runtime" "^7.14.0"17141715"@polkadot/rpc-core@4.13.2-5":1716  version "4.13.2-5"1717  resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-4.13.2-5.tgz#7fb29c70817d036ff81f7d0f19745833cdf26528"1718  integrity sha512-WiDIrrLJNDeYxGp0QYjabM8DheKmJb8xlGyPyQhghTxtf6dPKmLsEs/i6LQ4LbxsTagxmn0y/kvRq8X9j4B/YA==1719  dependencies:1720    "@babel/runtime" "^7.14.0"1721    "@polkadot/metadata" "4.13.2-5"1722    "@polkadot/rpc-provider" "4.13.2-5"1723    "@polkadot/types" "4.13.2-5"1724    "@polkadot/util" "^6.7.1"1725    "@polkadot/x-rxjs" "^6.7.1"17261727"@polkadot/rpc-provider@4.13.2-5":1728  version "4.13.2-5"1729  resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-4.13.2-5.tgz#7d1ed5c57e889a04992650d99f1fa566c03f7dcd"1730  integrity sha512-shycuAj3LG69jVNwI5Uu2j/t1kgXSN6YGtt6sh9cqwynAVNa7nwxAl6UQfd2Bcb4Dad9eOg/r7Da3ena7nb+wQ==1731  dependencies:1732    "@babel/runtime" "^7.14.0"1733    "@polkadot/types" "4.13.2-5"1734    "@polkadot/util" "^6.7.1"1735    "@polkadot/util-crypto" "^6.7.1"1736    "@polkadot/x-fetch" "^6.7.1"1737    "@polkadot/x-global" "^6.7.1"1738    "@polkadot/x-ws" "^6.7.1"1739    bn.js "^4.11.9"1740    eventemitter3 "^4.0.7"17411742"@polkadot/ts@0.3.89":1743  version "0.3.89"1744  resolved "https://registry.yarnpkg.com/@polkadot/ts/-/ts-0.3.89.tgz#c7a704ea284d04fcf4d581f5df156d5945480033"1745  integrity sha512-GC0H8wmVKebkieN2MHScjDDonzigIzkjl1Q4V1OhoRcfQbeZZ7vijeiVwP8Hw3wIw4GLKxxXeDrkKPWl/bcaHw==1746  dependencies:1747    "@types/chrome" "^0.0.144"17481749"@polkadot/typegen@4.13.2-5":1750  version "4.13.2-5"1751  resolved "https://registry.yarnpkg.com/@polkadot/typegen/-/typegen-4.13.2-5.tgz#f94bf689de6e5ca2d83f3781d0b303350d22b4c3"1752  integrity sha512-Cn2mlbwu/jyJmdAG/+wi8m2Gx8M3Dw5Zxi6sKB7TRMdNroQ7yhHhA+Sr32jgEC0DDcndwpq3rGSkezmHRcwDHQ==1753  dependencies:1754    "@babel/core" "^7.14.3"1755    "@babel/register" "^7.13.16"1756    "@babel/runtime" "^7.14.0"1757    "@polkadot/api" "4.13.2-5"1758    "@polkadot/metadata" "4.13.2-5"1759    "@polkadot/rpc-provider" "4.13.2-5"1760    "@polkadot/types" "4.13.2-5"1761    "@polkadot/util" "^6.7.1"1762    handlebars "^4.7.7"1763    websocket "^1.0.34"1764    yargs "^17.0.1"17651766"@polkadot/types-known@4.13.2-5":1767  version "4.13.2-5"1768  resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-4.13.2-5.tgz#4619ae08a40f34c25e8a081d386c5559abcd27e5"1769  integrity sha512-IqZDu1uXj8gfU0toKq+CC3S0gU0inEk6ve6qOxvcokLT0UGY8OZht9kjbkqccVjIqKVY6WVdGINUWqi4lGAmJw==1770  dependencies:1771    "@babel/runtime" "^7.14.0"1772    "@polkadot/networks" "^6.7.1"1773    "@polkadot/types" "4.13.2-5"1774    "@polkadot/util" "^6.7.1"1775    bn.js "^4.11.9"17761777"@polkadot/types@4.13.2-5":1778  version "4.13.2-5"1779  resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-4.13.2-5.tgz#c781ae306c27bb229c76a8578a49fe9decb0e4f0"1780  integrity sha512-71S8I5+1UoVlfXxLv03dkL4IuoU+X4rqRpbWKKk7h/wj1uEu/dSk+jJz5ObbUA7lu35PpyRL5QlmXurzVc7tzw==1781  dependencies:1782    "@babel/runtime" "^7.14.0"1783    "@polkadot/metadata" "4.13.2-5"1784    "@polkadot/util" "^6.7.1"1785    "@polkadot/util-crypto" "^6.7.1"1786    "@polkadot/x-rxjs" "^6.7.1"1787    "@types/bn.js" "^4.11.6"1788    bn.js "^4.11.9"17891790"@polkadot/util-crypto@6.7.1", "@polkadot/util-crypto@^6.7.1":1791  version "6.7.1"1792  resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-6.7.1.tgz#c30744ce809ac87120f417352108750b418be07a"1793  integrity sha512-lmZv+aHsC/VM/ixYx4xZtQRFrMX9wbWAXeXG4dBkJMmHAd59ug1PCetRFVHQDwjccu0RPldTZdsdVbreMD0T+g==1794  dependencies:1795    "@babel/runtime" "^7.14.0"1796    "@polkadot/networks" "6.7.1"1797    "@polkadot/util" "6.7.1"1798    "@polkadot/wasm-crypto" "^4.0.2"1799    "@polkadot/x-randomvalues" "6.7.1"1800    base-x "^3.0.8"1801    base64-js "^1.5.1"1802    blakejs "^1.1.0"1803    bn.js "^4.11.9"1804    create-hash "^1.2.0"1805    elliptic "^6.5.4"1806    hash.js "^1.1.7"1807    js-sha3 "^0.8.0"1808    scryptsy "^2.1.0"1809    tweetnacl "^1.0.3"1810    xxhashjs "^0.2.2"18111812"@polkadot/util@6.7.1", "@polkadot/util@^6.7.1":1813  version "6.7.1"1814  resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-6.7.1.tgz#decedda8326fd9504cd051cae598670f2cb31d31"1815  integrity sha512-EH9oQ7s5DFat57GGac3B+sZK3Np+vCwheMX4EbrnjbQEn4DBRFoqndRD2BIrWMzfNL2c5MDjDsSpe+5IFsihDQ==1816  dependencies:1817    "@babel/runtime" "^7.14.0"1818    "@polkadot/x-textdecoder" "6.7.1"1819    "@polkadot/x-textencoder" "6.7.1"1820    "@types/bn.js" "^4.11.6"1821    bn.js "^4.11.9"1822    camelcase "^5.3.1"1823    ip-regex "^4.3.0"18241825"@polkadot/wasm-crypto-asmjs@^4.0.2":1826  version "4.0.2"1827  resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-4.0.2.tgz#f42c353a64e1243841daf90e4bd54eff01a4e3cf"1828  integrity sha512-hlebqtGvfjg2ZNm4scwBGVHwOwfUhy2yw5RBHmPwkccUif3sIy4SAzstpcVBIVMdAEvo746bPWEInA8zJRcgJA==1829  dependencies:1830    "@babel/runtime" "^7.13.9"18311832"@polkadot/wasm-crypto-wasm@^4.0.2":1833  version "4.0.2"1834  resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-4.0.2.tgz#89f9e0a1e4d076784d4a42bea37fc8b06bdd8bb6"1835  integrity sha512-de/AfNPZ0uDKFWzOZ1rJCtaUbakGN29ks6IRYu6HZTRg7+RtqvE1rIkxabBvYgQVHIesmNwvEA9DlIkS6hYRFQ==1836  dependencies:1837    "@babel/runtime" "^7.13.9"18381839"@polkadot/wasm-crypto@^4.0.2":1840  version "4.0.2"1841  resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-4.0.2.tgz#9649057adee8383cc86433d107ba526b718c5a3b"1842  integrity sha512-2h9FuQFkBc+B3TwSapt6LtyPvgtd0Hq9QsHW8g8FrmKBFRiiFKYRpfJKHCk0aCZzuRf9h95bQl/X6IXAIWF2ng==1843  dependencies:1844    "@babel/runtime" "^7.13.9"1845    "@polkadot/wasm-crypto-asmjs" "^4.0.2"1846    "@polkadot/wasm-crypto-wasm" "^4.0.2"18471848"@polkadot/x-fetch@^6.7.1":1849  version "6.7.1"1850  resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-6.7.1.tgz#d5e80f3590e55ea267a14152777d15b3adfd1380"1851  integrity sha512-8NHTMGbv66i7YkzsTKFCHbRWwg5Z7LyYPaQH91hDlE5/RvuM7lY1Uykjeg6oOhHkQPDgVjZxv2Lypoqx5rpkAQ==1852  dependencies:1853    "@babel/runtime" "^7.14.0"1854    "@polkadot/x-global" "6.7.1"1855    "@types/node-fetch" "^2.5.10"1856    node-fetch "^2.6.1"18571858"@polkadot/x-global@6.7.1", "@polkadot/x-global@^6.7.1":1859  version "6.7.1"1860  resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-6.7.1.tgz#6a199b4e63a7497471d57efd57ca9271f1e3256f"1861  integrity sha512-rfzo5mG/Vc0Qiht1XMls7qpYHnTEI7z1Y08WUcZNGoBd6+dWnW+zTeKPCl4ouCF4TBD8pptjyn82ScSfw4X2IQ==1862  dependencies:1863    "@babel/runtime" "^7.14.0"1864    "@types/node-fetch" "^2.5.10"1865    node-fetch "^2.6.1"18661867"@polkadot/x-randomvalues@6.7.1":1868  version "6.7.1"1869  resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-6.7.1.tgz#d68226ae00b3a6cf4e265f75b10a40ce386c26fc"1870  integrity sha512-1g2IVax9ucotZtMaBRNAJ0UIpCKh/MwtrFiLFk2G7Yu/tV/OaYVnWzK46vgEtyTtJ9w3fi1xCVnvP121DV8RRQ==1871  dependencies:1872    "@babel/runtime" "^7.14.0"1873    "@polkadot/x-global" "6.7.1"18741875"@polkadot/x-rxjs@^6.7.1":1876  version "6.7.1"1877  resolved "https://registry.yarnpkg.com/@polkadot/x-rxjs/-/x-rxjs-6.7.1.tgz#4a4832d1632978c933b235d25037bf2be776457f"1878  integrity sha512-26h+QvluGtFIAcqyph4iPZd1vW7lDRTB46e3KKMbVl8j2qXGV2dDkt9x+zSU1h4cSgpOxahsb9SZEMGi4QaEdw==1879  dependencies:1880    "@babel/runtime" "^7.14.0"1881    rxjs "^6.6.7"18821883"@polkadot/x-textdecoder@6.7.1":1884  version "6.7.1"1885  resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-6.7.1.tgz#75d91c159a7b15687072f099c9677c955eb5e091"1886  integrity sha512-9ENlIx/XLZ1znSQC3wA8KI3EbqujCa/fEVjY7wlJ60OTybqWjZYrltgZPLBDQheDsYDd2JBGK1RJjDcRsCvK8g==1887  dependencies:1888    "@babel/runtime" "^7.14.0"1889    "@polkadot/x-global" "6.7.1"18901891"@polkadot/x-textencoder@6.7.1":1892  version "6.7.1"1893  resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-6.7.1.tgz#fdc77abeeb8e83e6c67ffa189c4b7ff9bb69c1cb"1894  integrity sha512-+M4x2bhHFvZsiXb2bnw224EE/0fXr6bG/dJclZUdvcL+JrwiE/7UMD8xUcEmdR2LfNJGDkCxKkXp3096ZavUxQ==1895  dependencies:1896    "@babel/runtime" "^7.14.0"1897    "@polkadot/x-global" "6.7.1"18981899"@polkadot/x-ws@^6.7.1":1900  version "6.7.1"1901  resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-6.7.1.tgz#ba7047e77c16d7c8a8a21783870affc008f0fcc2"1902  integrity sha512-oC/Q77uZVKueJSxTiLUPrmtJQ2U+DsHaddw0xSY2GU2JMoJWhte0aKOLNSUrtstakgEhOUc1iIgeY67pBJ6z7g==1903  dependencies:1904    "@babel/runtime" "^7.14.0"1905    "@polkadot/x-global" "6.7.1"1906    "@types/websocket" "^1.0.2"1907    websocket "^1.0.34"19081909"@rushstack/eslint-patch@^1.0.6":1910  version "1.0.6"1911  resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.0.6.tgz#023d72a5c4531b4ce204528971700a78a85a0c50"1912  integrity sha512-Myxw//kzromB9yWgS8qYGuGVf91oBUUJpNvy5eM50sqvmKLbKjwLxohJnkWGTeeI9v9IBMtPLxz5Gc60FIfvCA==19131914"@sindresorhus/is@^0.14.0":1915  version "0.14.0"1916  resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"1917  integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==19181919"@sinonjs/commons@^1.7.0":1920  version "1.8.2"1921  resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b"1922  integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==1923  dependencies:1924    type-detect "4.0.8"19251926"@sinonjs/fake-timers@^7.0.2":1927  version "7.1.2"1928  resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz#2524eae70c4910edccf99b2f4e6efc5894aff7b5"1929  integrity sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==1930  dependencies:1931    "@sinonjs/commons" "^1.7.0"19321933"@szmarczak/http-timer@^1.1.2":1934  version "1.1.2"1935  resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"1936  integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==1937  dependencies:1938    defer-to-connect "^1.0.1"19391940"@tootallnate/once@1":1941  version "1.1.2"1942  resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"1943  integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==19441945"@types/babel__core@^7.0.0":1946  version "7.1.12"1947  resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d"1948  integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==1949  dependencies:1950    "@babel/parser" "^7.1.0"1951    "@babel/types" "^7.0.0"1952    "@types/babel__generator" "*"1953    "@types/babel__template" "*"1954    "@types/babel__traverse" "*"19551956"@types/babel__core@^7.1.14":1957  version "7.1.14"1958  resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402"1959  integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==1960  dependencies:1961    "@babel/parser" "^7.1.0"1962    "@babel/types" "^7.0.0"1963    "@types/babel__generator" "*"1964    "@types/babel__template" "*"1965    "@types/babel__traverse" "*"19661967"@types/babel__generator@*":1968  version "7.6.2"1969  resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8"1970  integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==1971  dependencies:1972    "@babel/types" "^7.0.0"19731974"@types/babel__template@*":1975  version "7.4.0"1976  resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be"1977  integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==1978  dependencies:1979    "@babel/parser" "^7.1.0"1980    "@babel/types" "^7.0.0"19811982"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":1983  version "7.11.0"1984  resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0"1985  integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==1986  dependencies:1987    "@babel/types" "^7.3.0"19881989"@types/bn.js@^4.11.6":1990  version "4.11.6"1991  resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c"1992  integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==1993  dependencies:1994    "@types/node" "*"19951996"@types/chai-as-promised@^7.1.3":1997  version "7.1.3"1998  resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.3.tgz#779166b90fda611963a3adbfd00b339d03b747bd"1999  integrity sha512-FQnh1ohPXJELpKhzjuDkPLR2BZCAqed+a6xV4MI/T3XzHfd2FlarfUGUdZYgqYe8oxkYn0fchHEeHfHqdZ96sg==2000  dependencies:2001    "@types/chai" "*"20022003"@types/chai@*", "@types/chai@^4.2.12":2004  version "4.2.15"2005  resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.15.tgz#b7a6d263c2cecf44b6de9a051cf496249b154553"2006  integrity sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ==20072008"@types/chrome@^0.0.144":2009  version "0.0.144"2010  resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.144.tgz#7dd9188e355aa17e3ad397f50b5cd3ad12caf788"2011  integrity sha512-BgoiO7/KP9hRNrCR2Wq+aKWT5Dh9bTofuWaRtcqPcj8YKhZojQgb6sSdIqvds2C+eO63BwaR9KHVMYYgZdGGBg==2012  dependencies:2013    "@types/filesystem" "*"2014    "@types/har-format" "*"20152016"@types/filesystem@*":2017  version "0.0.29"2018  resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.29.tgz#ee3748eb5be140dcf980c3bd35f11aec5f7a3748"2019  integrity sha512-85/1KfRedmfPGsbK8YzeaQUyV1FQAvMPMTuWFQ5EkLd2w7szhNO96bk3Rh/SKmOfd9co2rCLf0Voy4o7ECBOvw==2020  dependencies:2021    "@types/filewriter" "*"20222023"@types/filewriter@*":2024  version "0.0.28"2025  resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.28.tgz#c054e8af4d9dd75db4e63abc76f885168714d4b3"2026  integrity sha1-wFTor02d11205jq8dviFFocU1LM=20272028"@types/graceful-fs@^4.1.2":2029  version "4.1.4"2030  resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753"2031  integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==2032  dependencies:2033    "@types/node" "*"20342035"@types/har-format@*":2036  version "1.2.5"2037  resolved "https://registry.yarnpkg.com/@types/har-format/-/har-format-1.2.5.tgz#4f6648814d0fdcb6a510e3364a9db439a753c4b1"2038  integrity sha512-IG8AE1m2pWtPqQ7wXhFhy6Q59bwwnLwO36v5Rit2FrbXCIp8Sk8E2PfUCreyrdo17STwFSKDAkitVuVYbpEHvQ==20392040"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":2041  version "2.0.3"2042  resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"2043  integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==20442045"@types/istanbul-lib-report@*":2046  version "3.0.0"2047  resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"2048  integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==2049  dependencies:2050    "@types/istanbul-lib-coverage" "*"20512052"@types/istanbul-reports@^3.0.0":2053  version "3.0.0"2054  resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821"2055  integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==2056  dependencies:2057    "@types/istanbul-lib-report" "*"20582059"@types/json-schema@^7.0.7":2060  version "7.0.7"2061  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"2062  integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==20632064"@types/json5@^0.0.29":2065  version "0.0.29"2066  resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"2067  integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=20682069"@types/mocha@^8.0.3":2070  version "8.2.0"2071  resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.0.tgz#3eb56d13a1de1d347ecb1957c6860c911704bc44"2072  integrity sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ==20732074"@types/node-fetch@^2.5.10":2075  version "2.5.10"2076  resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.10.tgz#9b4d4a0425562f9fcea70b12cb3fcdd946ca8132"2077  integrity sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==2078  dependencies:2079    "@types/node" "*"2080    form-data "^3.0.0"20812082"@types/node@*", "@types/node@>= 8":2083  version "14.14.25"2084  resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.25.tgz#15967a7b577ff81383f9b888aa6705d43fbbae93"2085  integrity sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ==20862087"@types/prettier@^2.1.5":2088  version "2.2.3"2089  resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0"2090  integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==20912092"@types/stack-utils@^2.0.0":2093  version "2.0.0"2094  resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff"2095  integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==20962097"@types/websocket@^1.0.2":2098  version "1.0.2"2099  resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.2.tgz#d2855c6a312b7da73ed16ba6781815bf30c6187a"2100  integrity sha512-B5m9aq7cbbD/5/jThEr33nUY8WEfVi6A2YKCTOvw5Ldy7mtsOkqRvGjnzy6g7iMMDsgu7xREuCzqATLDLQVKcQ==2101  dependencies:2102    "@types/node" "*"21032104"@types/yargs-parser@*":2105  version "20.2.0"2106  resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9"2107  integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==21082109"@types/yargs@^16.0.0":2110  version "16.0.3"2111  resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.3.tgz#4b6d35bb8e680510a7dc2308518a80ee1ef27e01"2112  integrity sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==2113  dependencies:2114    "@types/yargs-parser" "*"21152116"@typescript-eslint/eslint-plugin@4.26.0":2117  version "4.26.0"2118  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.0.tgz#12bbd6ebd5e7fabd32e48e1e60efa1f3554a3242"2119  integrity sha512-yA7IWp+5Qqf+TLbd8b35ySFOFzUfL7i+4If50EqvjT6w35X8Lv0eBHb6rATeWmucks37w+zV+tWnOXI9JlG6Eg==2120  dependencies:2121    "@typescript-eslint/experimental-utils" "4.26.0"2122    "@typescript-eslint/scope-manager" "4.26.0"2123    debug "^4.3.1"2124    functional-red-black-tree "^1.0.1"2125    lodash "^4.17.21"2126    regexpp "^3.1.0"2127    semver "^7.3.5"2128    tsutils "^3.21.0"21292130"@typescript-eslint/experimental-utils@4.26.0":2131  version "4.26.0"2132  resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.26.0.tgz#ba7848b3f088659cdf71bce22454795fc55be99a"2133  integrity sha512-TH2FO2rdDm7AWfAVRB5RSlbUhWxGVuxPNzGT7W65zVfl8H/WeXTk1e69IrcEVsBslrQSTDKQSaJD89hwKrhdkw==2134  dependencies:2135    "@types/json-schema" "^7.0.7"2136    "@typescript-eslint/scope-manager" "4.26.0"2137    "@typescript-eslint/types" "4.26.0"2138    "@typescript-eslint/typescript-estree" "4.26.0"2139    eslint-scope "^5.1.1"2140    eslint-utils "^3.0.0"21412142"@typescript-eslint/parser@4.26.0":2143  version "4.26.0"2144  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.26.0.tgz#31b6b732c9454f757b020dab9b6754112aa5eeaf"2145  integrity sha512-b4jekVJG9FfmjUfmM4VoOItQhPlnt6MPOBUL0AQbiTmm+SSpSdhHYlwayOm4IW9KLI/4/cRKtQCmDl1oE2OlPg==2146  dependencies:2147    "@typescript-eslint/scope-manager" "4.26.0"2148    "@typescript-eslint/types" "4.26.0"2149    "@typescript-eslint/typescript-estree" "4.26.0"2150    debug "^4.3.1"21512152"@typescript-eslint/scope-manager@4.26.0":2153  version "4.26.0"2154  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.26.0.tgz#60d1a71df162404e954b9d1c6343ff3bee496194"2155  integrity sha512-G6xB6mMo4xVxwMt5lEsNTz3x4qGDt0NSGmTBNBPJxNsrTXJSm21c6raeYroS2OwQsOyIXqKZv266L/Gln1BWqg==2156  dependencies:2157    "@typescript-eslint/types" "4.26.0"2158    "@typescript-eslint/visitor-keys" "4.26.0"21592160"@typescript-eslint/types@4.15.0":2161  version "4.15.0"2162  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.15.0.tgz#3011ae1ac3299bb9a5ac56bdd297cccf679d3662"2163  integrity sha512-su4RHkJhS+iFwyqyXHcS8EGPlUVoC+XREfy5daivjLur9JP8GhvTmDipuRpcujtGC4M+GYhUOJCPDE3rC5NJrg==21642165"@typescript-eslint/types@4.26.0":2166  version "4.26.0"2167  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.26.0.tgz#7c6732c0414f0a69595f4f846ebe12616243d546"2168  integrity sha512-rADNgXl1kS/EKnDr3G+m7fB9yeJNnR9kF7xMiXL6mSIWpr3Wg5MhxyfEXy/IlYthsqwBqHOr22boFbf/u6O88A==21692170"@typescript-eslint/typescript-estree@4.26.0":2171  version "4.26.0"2172  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.0.tgz#aea17a40e62dc31c63d5b1bbe9a75783f2ce7109"2173  integrity sha512-GHUgahPcm9GfBuy3TzdsizCcPjKOAauG9xkz9TR8kOdssz2Iz9jRCSQm6+aVFa23d5NcSpo1GdHGSQKe0tlcbg==2174  dependencies:2175    "@typescript-eslint/types" "4.26.0"2176    "@typescript-eslint/visitor-keys" "4.26.0"2177    debug "^4.3.1"2178    globby "^11.0.3"2179    is-glob "^4.0.1"2180    semver "^7.3.5"2181    tsutils "^3.21.0"21822183"@typescript-eslint/typescript-estree@^4.8.2":2184  version "4.15.0"2185  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.0.tgz#402c86a7d2111c1f7a2513022f22a38a395b7f93"2186  integrity sha512-jG6xTmcNbi6xzZq0SdWh7wQ9cMb2pqXaUp6bUZOMsIlu5aOlxGxgE/t6L/gPybybQGvdguajXGkZKSndZJpksA==2187  dependencies:2188    "@typescript-eslint/types" "4.15.0"2189    "@typescript-eslint/visitor-keys" "4.15.0"2190    debug "^4.1.1"2191    globby "^11.0.1"2192    is-glob "^4.0.1"2193    semver "^7.3.2"2194    tsutils "^3.17.1"21952196"@typescript-eslint/visitor-keys@4.15.0":2197  version "4.15.0"2198  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.0.tgz#2a07768df30c8a5673f1bce406338a07fdec38ca"2199  integrity sha512-RnDtJwOwFucWFAMjG3ghCG/ikImFJFEg20DI7mn4pHEx3vC48lIAoyjhffvfHmErRDboUPC7p9Z2il4CLb7qxA==2200  dependencies:2201    "@typescript-eslint/types" "4.15.0"2202    eslint-visitor-keys "^2.0.0"22032204"@typescript-eslint/visitor-keys@4.26.0":2205  version "4.26.0"2206  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.0.tgz#26d2583169222815be4dcd1da4fe5459bc3bcc23"2207  integrity sha512-cw4j8lH38V1ycGBbF+aFiLUls9Z0Bw8QschP3mkth50BbWzgFS33ISIgBzUMuQ2IdahoEv/rXstr8Zhlz4B1Zg==2208  dependencies:2209    "@typescript-eslint/types" "4.26.0"2210    eslint-visitor-keys "^2.0.0"22112212"@ungap/promise-all-settled@1.1.2":2213  version "1.1.2"2214  resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"2215  integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==22162217"@vue/component-compiler-utils@^3.2.0":2218  version "3.2.0"2219  resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz#8f85182ceed28e9b3c75313de669f83166d11e5d"2220  integrity sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==2221  dependencies:2222    consolidate "^0.15.1"2223    hash-sum "^1.0.2"2224    lru-cache "^4.1.2"2225    merge-source-map "^1.1.0"2226    postcss "^7.0.14"2227    postcss-selector-parser "^6.0.2"2228    source-map "~0.6.1"2229    vue-template-es2015-compiler "^1.9.0"2230  optionalDependencies:2231    prettier "^1.18.2"22322233abab@^2.0.3, abab@^2.0.5:2234  version "2.0.5"2235  resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"2236  integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==22372238acorn-globals@^6.0.0:2239  version "6.0.0"2240  resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"2241  integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==2242  dependencies:2243    acorn "^7.1.1"2244    acorn-walk "^7.1.1"22452246acorn-jsx@^5.3.1:2247  version "5.3.1"2248  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"2249  integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==22502251acorn-walk@^7.1.1:2252  version "7.2.0"2253  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"2254  integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==22552256acorn@^7.1.1, acorn@^7.4.0:2257  version "7.4.1"2258  resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"2259  integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==22602261acorn@^8.2.4:2262  version "8.3.0"2263  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.3.0.tgz#1193f9b96c4e8232f00b11a9edff81b2c8b98b88"2264  integrity sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==22652266agent-base@6:2267  version "6.0.2"2268  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"2269  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==2270  dependencies:2271    debug "4"22722273ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4:2274  version "6.12.6"2275  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"2276  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==2277  dependencies:2278    fast-deep-equal "^3.1.1"2279    fast-json-stable-stringify "^2.0.0"2280    json-schema-traverse "^0.4.1"2281    uri-js "^4.2.2"22822283ajv@^8.0.1:2284  version "8.6.0"2285  resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720"2286  integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==2287  dependencies:2288    fast-deep-equal "^3.1.1"2289    json-schema-traverse "^1.0.0"2290    require-from-string "^2.0.2"2291    uri-js "^4.2.2"22922293ansi-align@^3.0.0:2294  version "3.0.0"2295  resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb"2296  integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==2297  dependencies:2298    string-width "^3.0.0"22992300ansi-colors@4.1.1, ansi-colors@^4.1.1:2301  version "4.1.1"2302  resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"2303  integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==23042305ansi-escapes@^4.2.1:2306  version "4.3.1"2307  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"2308  integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==2309  dependencies:2310    type-fest "^0.11.0"23112312ansi-regex@^2.0.0:2313  version "2.1.1"2314  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"2315  integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=23162317ansi-regex@^3.0.0:2318  version "3.0.0"2319  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"2320  integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=23212322ansi-regex@^4.1.0:2323  version "4.1.0"2324  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"2325  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==23262327ansi-regex@^5.0.0:2328  version "5.0.0"2329  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"2330  integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==23312332ansi-styles@^3.2.0, ansi-styles@^3.2.1:2333  version "3.2.1"2334  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"2335  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==2336  dependencies:2337    color-convert "^1.9.0"23382339ansi-styles@^4.0.0, ansi-styles@^4.1.0:2340  version "4.3.0"2341  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"2342  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==2343  dependencies:2344    color-convert "^2.0.1"23452346ansi-styles@^5.0.0:2347  version "5.2.0"2348  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"2349  integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==23502351anymatch@^2.0.0:2352  version "2.0.0"2353  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"2354  integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==2355  dependencies:2356    micromatch "^3.1.4"2357    normalize-path "^2.1.1"23582359anymatch@^3.0.3, anymatch@~3.1.1:2360  version "3.1.1"2361  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"2362  integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==2363  dependencies:2364    normalize-path "^3.0.0"2365    picomatch "^2.0.4"23662367app-module-path@^2.2.0:2368  version "2.2.0"2369  resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5"2370  integrity sha1-ZBqlXft9am8KgUHEucCqULbCTdU=23712372application-config-path@^0.1.0:2373  version "0.1.0"2374  resolved "https://registry.yarnpkg.com/application-config-path/-/application-config-path-0.1.0.tgz#193c5f0a86541a4c66fba1e2dc38583362ea5e8f"2375  integrity sha1-GTxfCoZUGkxm+6Hi3DhYM2LqXo8=23762377application-config@^2.0.0:2378  version "2.0.0"2379  resolved "https://registry.yarnpkg.com/application-config/-/application-config-2.0.0.tgz#15b4d54d61c0c082f9802227e3e85de876b47747"2380  integrity sha512-NC5/0guSZK3/UgUDfCk/riByXzqz0owL1L3r63JPSBzYk5QALrp3bLxbsR7qeSfvYfFmAhnp3dbqYsW3U9MpZQ==2381  dependencies:2382    application-config-path "^0.1.0"2383    load-json-file "^6.2.0"2384    write-json-file "^4.2.0"23852386aproba@^1.0.3:2387  version "1.2.0"2388  resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"2389  integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==23902391arg@^4.1.0:2392  version "4.1.3"2393  resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"2394  integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==23952396argparse@^1.0.7:2397  version "1.0.10"2398  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"2399  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==2400  dependencies:2401    sprintf-js "~1.0.2"24022403arr-diff@^4.0.0:2404  version "4.0.0"2405  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"2406  integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=24072408arr-flatten@^1.1.0:2409  version "1.1.0"2410  resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"2411  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==24122413arr-union@^3.1.0:2414  version "3.1.0"2415  resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"2416  integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=24172418array-includes@^3.1.2:2419  version "3.1.2"2420  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8"2421  integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==2422  dependencies:2423    call-bind "^1.0.0"2424    define-properties "^1.1.3"2425    es-abstract "^1.18.0-next.1"2426    get-intrinsic "^1.0.1"2427    is-string "^1.0.5"24282429array-includes@^3.1.3:2430  version "3.1.3"2431  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a"2432  integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==2433  dependencies:2434    call-bind "^1.0.2"2435    define-properties "^1.1.3"2436    es-abstract "^1.18.0-next.2"2437    get-intrinsic "^1.1.1"2438    is-string "^1.0.5"24392440array-union@^1.0.1:2441  version "1.0.2"2442  resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"2443  integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=2444  dependencies:2445    array-uniq "^1.0.1"24462447array-union@^2.1.0:2448  version "2.1.0"2449  resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"2450  integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==24512452array-uniq@^1.0.1:2453  version "1.0.3"2454  resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"2455  integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=24562457array-unique@^0.3.2:2458  version "0.3.2"2459  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"2460  integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=24612462array.prototype.flat@^1.2.4:2463  version "1.2.4"2464  resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123"2465  integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==2466  dependencies:2467    call-bind "^1.0.0"2468    define-properties "^1.1.3"2469    es-abstract "^1.18.0-next.1"24702471array.prototype.flatmap@^1.2.4:2472  version "1.2.4"2473  resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9"2474  integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==2475  dependencies:2476    call-bind "^1.0.0"2477    define-properties "^1.1.3"2478    es-abstract "^1.18.0-next.1"2479    function-bind "^1.1.1"24802481asn1@~0.2.3:2482  version "0.2.4"2483  resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"2484  integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==2485  dependencies:2486    safer-buffer "~2.1.0"24872488assert-plus@1.0.0, assert-plus@^1.0.0:2489  version "1.0.0"2490  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"2491  integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=24922493assertion-error@^1.1.0:2494  version "1.1.0"2495  resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"2496  integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==24972498assign-symbols@^1.0.0:2499  version "1.0.0"2500  resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"2501  integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=25022503ast-module-types@^2.3.2, ast-module-types@^2.4.0, ast-module-types@^2.7.0, ast-module-types@^2.7.1:2504  version "2.7.1"2505  resolved "https://registry.yarnpkg.com/ast-module-types/-/ast-module-types-2.7.1.tgz#3f7989ef8dfa1fdb82dfe0ab02bdfc7c77a57dd3"2506  integrity sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==25072508astral-regex@^2.0.0:2509  version "2.0.0"2510  resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"2511  integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==25122513async-each@^1.0.1:2514  version "1.0.3"2515  resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"2516  integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==25172518async@^2.6.1:2519  version "2.6.3"2520  resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"2521  integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==2522  dependencies:2523    lodash "^4.17.14"25242525async@^3.2.0:2526  version "3.2.0"2527  resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"2528  integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==25292530asynckit@^0.4.0:2531  version "0.4.0"2532  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"2533  integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=25342535atob@^2.1.2:2536  version "2.1.2"2537  resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"2538  integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==25392540aws-sign2@~0.7.0:2541  version "0.7.0"2542  resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"2543  integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=25442545aws4@^1.8.0:2546  version "1.11.0"2547  resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"2548  integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==25492550babel-jest@^27.0.2:2551  version "27.0.2"2552  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.2.tgz#7dc18adb01322acce62c2af76ea2c7cd186ade37"2553  integrity sha512-9OThPl3/IQbo4Yul2vMz4FYwILPQak8XelX4YGowygfHaOl5R5gfjm4iVx4d8aUugkW683t8aq0A74E7b5DU1Q==2554  dependencies:2555    "@jest/transform" "^27.0.2"2556    "@jest/types" "^27.0.2"2557    "@types/babel__core" "^7.1.14"2558    babel-plugin-istanbul "^6.0.0"2559    babel-preset-jest "^27.0.1"2560    chalk "^4.0.0"2561    graceful-fs "^4.2.4"2562    slash "^3.0.0"25632564babel-plugin-dynamic-import-node@^2.3.3:2565  version "2.3.3"2566  resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"2567  integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==2568  dependencies:2569    object.assign "^4.1.0"25702571babel-plugin-istanbul@^6.0.0:2572  version "6.0.0"2573  resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765"2574  integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==2575  dependencies:2576    "@babel/helper-plugin-utils" "^7.0.0"2577    "@istanbuljs/load-nyc-config" "^1.0.0"2578    "@istanbuljs/schema" "^0.1.2"2579    istanbul-lib-instrument "^4.0.0"2580    test-exclude "^6.0.0"25812582babel-plugin-jest-hoist@^27.0.1:2583  version "27.0.1"2584  resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz#a6d10e484c93abff0f4e95f437dad26e5736ea11"2585  integrity sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==2586  dependencies:2587    "@babel/template" "^7.3.3"2588    "@babel/types" "^7.3.3"2589    "@types/babel__core" "^7.0.0"2590    "@types/babel__traverse" "^7.0.6"25912592babel-plugin-module-extension-resolver@^1.0.0-rc.2:2593  version "1.0.0-rc.2"2594  resolved "https://registry.yarnpkg.com/babel-plugin-module-extension-resolver/-/babel-plugin-module-extension-resolver-1.0.0-rc.2.tgz#c12a5bc29c478cc87cdf9359188bf500db53eae9"2595  integrity sha512-nSvCi7Eq079snAYgWbq+VM8eci7OER9MAhDchuxpdimuyJr06x/Stsmc2b6zP5CDv4XR54Etkpf7jOo5NfzgVg==25962597babel-plugin-module-resolver@^4.1.0:2598  version "4.1.0"2599  resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz#22a4f32f7441727ec1fbf4967b863e1e3e9f33e2"2600  integrity sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==2601  dependencies:2602    find-babel-config "^1.2.0"2603    glob "^7.1.6"2604    pkg-up "^3.1.0"2605    reselect "^4.0.0"2606    resolve "^1.13.1"26072608babel-plugin-polyfill-corejs2@^0.2.2:2609  version "0.2.2"2610  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327"2611  integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==2612  dependencies:2613    "@babel/compat-data" "^7.13.11"2614    "@babel/helper-define-polyfill-provider" "^0.2.2"2615    semver "^6.1.1"26162617babel-plugin-polyfill-corejs3@^0.2.2:2618  version "0.2.2"2619  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz#7424a1682ee44baec817327710b1b094e5f8f7f5"2620  integrity sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A==2621  dependencies:2622    "@babel/helper-define-polyfill-provider" "^0.2.2"2623    core-js-compat "^3.9.1"26242625babel-plugin-polyfill-regenerator@^0.2.2:2626  version "0.2.2"2627  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077"2628  integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==2629  dependencies:2630    "@babel/helper-define-polyfill-provider" "^0.2.2"26312632babel-plugin-styled-components@^1.12.0:2633  version "1.12.0"2634  resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.12.0.tgz#1dec1676512177de6b827211e9eda5a30db4f9b9"2635  integrity sha512-FEiD7l5ZABdJPpLssKXjBUJMYqzbcNzBowfXDCdJhOpbhWiewapUaY+LZGT8R4Jg2TwOjGjG4RKeyrO5p9sBkA==2636  dependencies:2637    "@babel/helper-annotate-as-pure" "^7.0.0"2638    "@babel/helper-module-imports" "^7.0.0"2639    babel-plugin-syntax-jsx "^6.18.0"2640    lodash "^4.17.11"26412642babel-plugin-syntax-jsx@^6.18.0:2643  version "6.18.0"2644  resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"2645  integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=26462647babel-preset-current-node-syntax@^1.0.0:2648  version "1.0.1"2649  resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"2650  integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==2651  dependencies:2652    "@babel/plugin-syntax-async-generators" "^7.8.4"2653    "@babel/plugin-syntax-bigint" "^7.8.3"2654    "@babel/plugin-syntax-class-properties" "^7.8.3"2655    "@babel/plugin-syntax-import-meta" "^7.8.3"2656    "@babel/plugin-syntax-json-strings" "^7.8.3"2657    "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"2658    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"2659    "@babel/plugin-syntax-numeric-separator" "^7.8.3"2660    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"2661    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"2662    "@babel/plugin-syntax-optional-chaining" "^7.8.3"2663    "@babel/plugin-syntax-top-level-await" "^7.8.3"26642665babel-preset-jest@^27.0.1:2666  version "27.0.1"2667  resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz#7a50c75d16647c23a2cf5158d5bb9eb206b10e20"2668  integrity sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==2669  dependencies:2670    babel-plugin-jest-hoist "^27.0.1"2671    babel-preset-current-node-syntax "^1.0.0"26722673balanced-match@^1.0.0:2674  version "1.0.0"2675  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"2676  integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=26772678base-x@^3.0.8:2679  version "3.0.8"2680  resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d"2681  integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==2682  dependencies:2683    safe-buffer "^5.0.1"26842685base64-js@^1.3.1, base64-js@^1.5.1:2686  version "1.5.1"2687  resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"2688  integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==26892690base@^0.11.1:2691  version "0.11.2"2692  resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"2693  integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==2694  dependencies:2695    cache-base "^1.0.1"2696    class-utils "^0.3.5"2697    component-emitter "^1.2.1"2698    define-property "^1.0.0"2699    isobject "^3.0.1"2700    mixin-deep "^1.2.0"2701    pascalcase "^0.1.1"27022703bcrypt-pbkdf@^1.0.0:2704  version "1.0.2"2705  resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"2706  integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=2707  dependencies:2708    tweetnacl "^0.14.3"27092710before-after-hook@^2.1.0:2711  version "2.1.1"2712  resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.1.tgz#99ae36992b5cfab4a83f6bee74ab27835f28f405"2713  integrity sha512-5ekuQOvO04MDj7kYZJaMab2S8SPjGJbotVNyv7QYFCOAwrGZs/YnoDNlh1U+m5hl7H2D/+n0taaAV/tfyd3KMA==27142715bignumber.js@^9.0.0:2716  version "9.0.1"2717  resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5"2718  integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==27192720binary-extensions@^1.0.0:2721  version "1.13.1"2722  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"2723  integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==27242725binary-extensions@^2.0.0:2726  version "2.2.0"2727  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"2728  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==27292730bl@^4.0.3, bl@^4.1.0:2731  version "4.1.0"2732  resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"2733  integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==2734  dependencies:2735    buffer "^5.5.0"2736    inherits "^2.0.4"2737    readable-stream "^3.4.0"27382739blakejs@^1.1.0:2740  version "1.1.0"2741  resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5"2742  integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U=27432744bluebird@^3.1.1:2745  version "3.7.2"2746  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"2747  integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==27482749bn.js@^4.11.9:2750  version "4.11.9"2751  resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"2752  integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==27532754boxen@^5.0.0:2755  version "5.0.0"2756  resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.0.tgz#64fe9b16066af815f51057adcc800c3730120854"2757  integrity sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA==2758  dependencies:2759    ansi-align "^3.0.0"2760    camelcase "^6.2.0"2761    chalk "^4.1.0"2762    cli-boxes "^2.2.1"2763    string-width "^4.2.0"2764    type-fest "^0.20.2"2765    widest-line "^3.1.0"2766    wrap-ansi "^7.0.0"27672768brace-expansion@^1.1.7:2769  version "1.1.11"2770  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"2771  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==2772  dependencies:2773    balanced-match "^1.0.0"2774    concat-map "0.0.1"27752776braces@^2.3.1, braces@^2.3.2:2777  version "2.3.2"2778  resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"2779  integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==2780  dependencies:2781    arr-flatten "^1.1.0"2782    array-unique "^0.3.2"2783    extend-shallow "^2.0.1"2784    fill-range "^4.0.0"2785    isobject "^3.0.1"2786    repeat-element "^1.1.2"2787    snapdragon "^0.8.1"2788    snapdragon-node "^2.0.1"2789    split-string "^3.0.2"2790    to-regex "^3.0.1"27912792braces@^3.0.1, braces@~3.0.2:2793  version "3.0.2"2794  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"2795  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==2796  dependencies:2797    fill-range "^7.0.1"27982799brorand@^1.1.0:2800  version "1.1.0"2801  resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"2802  integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=28032804browser-process-hrtime@^1.0.0:2805  version "1.0.0"2806  resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"2807  integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==28082809browser-stdout@1.3.1:2810  version "1.3.1"2811  resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"2812  integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==28132814browserslist@^4.16.6:2815  version "4.16.6"2816  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2"2817  integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==2818  dependencies:2819    caniuse-lite "^1.0.30001219"2820    colorette "^1.2.2"2821    electron-to-chromium "^1.3.723"2822    escalade "^3.1.1"2823    node-releases "^1.1.71"28242825bser@2.1.1:2826  version "2.1.1"2827  resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"2828  integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==2829  dependencies:2830    node-int64 "^0.4.0"28312832buffer-from@^1.0.0:2833  version "1.1.1"2834  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"2835  integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==28362837buffer@^5.5.0:2838  version "5.7.1"2839  resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"2840  integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==2841  dependencies:2842    base64-js "^1.3.1"2843    ieee754 "^1.1.13"28442845bufferutil@^4.0.1:2846  version "4.0.3"2847  resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b"2848  integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==2849  dependencies:2850    node-gyp-build "^4.2.0"28512852builtin-modules@^1.1.1:2853  version "1.1.1"2854  resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"2855  integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=28562857cache-base@^1.0.1:2858  version "1.0.1"2859  resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"2860  integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==2861  dependencies:2862    collection-visit "^1.0.0"2863    component-emitter "^1.2.1"2864    get-value "^2.0.6"2865    has-value "^1.0.0"2866    isobject "^3.0.1"2867    set-value "^2.0.0"2868    to-object-path "^0.3.0"2869    union-value "^1.0.0"2870    unset-value "^1.0.0"28712872cacheable-request@^6.0.0:2873  version "6.1.0"2874  resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"2875  integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==2876  dependencies:2877    clone-response "^1.0.2"2878    get-stream "^5.1.0"2879    http-cache-semantics "^4.0.0"2880    keyv "^3.0.0"2881    lowercase-keys "^2.0.0"2882    normalize-url "^4.1.0"2883    responselike "^1.0.2"28842885call-bind@^1.0.0, call-bind@^1.0.2:2886  version "1.0.2"2887  resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"2888  integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==2889  dependencies:2890    function-bind "^1.1.1"2891    get-intrinsic "^1.0.2"28922893callsites@^3.0.0:2894  version "3.1.0"2895  resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"2896  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==28972898camelcase@^5.0.0, camelcase@^5.3.1:2899  version "5.3.1"2900  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"2901  integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==29022903camelcase@^6.0.0, camelcase@^6.2.0:2904  version "6.2.0"2905  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"2906  integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==29072908caniuse-lite@^1.0.30001219:2909  version "1.0.30001236"2910  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz#0a80de4cdf62e1770bb46a30d884fc8d633e3958"2911  integrity sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ==29122913caseless@~0.12.0:2914  version "0.12.0"2915  resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"2916  integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=29172918chai-as-promised@^7.1.1:2919  version "7.1.1"2920  resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0"2921  integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==2922  dependencies:2923    check-error "^1.0.2"29242925chai@^4.2.0:2926  version "4.3.0"2927  resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.0.tgz#5523a5faf7f819c8a92480d70a8cccbadacfc25f"2928  integrity sha512-/BFd2J30EcOwmdOgXvVsmM48l0Br0nmZPlO0uOW4XKh6kpsUumRXBgPV+IlaqFaqr9cYbeoZAM1Npx0i4A+aiA==2929  dependencies:2930    assertion-error "^1.1.0"2931    check-error "^1.0.2"2932    deep-eql "^3.0.1"2933    get-func-name "^2.0.0"2934    pathval "^1.1.0"2935    type-detect "^4.0.5"29362937chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.2:2938  version "2.4.2"2939  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"2940  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==2941  dependencies:2942    ansi-styles "^3.2.1"2943    escape-string-regexp "^1.0.5"2944    supports-color "^5.3.0"29452946chalk@^3.0.0:2947  version "3.0.0"2948  resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"2949  integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==2950  dependencies:2951    ansi-styles "^4.1.0"2952    supports-color "^7.1.0"29532954chalk@^4.0.0, chalk@^4.1.0:2955  version "4.1.0"2956  resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"2957  integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==2958  dependencies:2959    ansi-styles "^4.1.0"2960    supports-color "^7.1.0"29612962chalk@^4.1.1:2963  version "4.1.1"2964  resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"2965  integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==2966  dependencies:2967    ansi-styles "^4.1.0"2968    supports-color "^7.1.0"29692970changelog-parser@^2.0.0:2971  version "2.8.0"2972  resolved "https://registry.yarnpkg.com/changelog-parser/-/changelog-parser-2.8.0.tgz#c14293e3e8fab797913c722de965480198650108"2973  integrity sha512-ZtSwN0hY7t+WpvaXqqXz98RHCNhWX9HsvCRAv1aBLlqJ7BpKtqdM6Nu6JOiUhRAWR7Gov0aN0fUnmflTz0WgZg==2974  dependencies:2975    line-reader "^0.2.4"2976    remove-markdown "^0.2.2"29772978char-regex@^1.0.2:2979  version "1.0.2"2980  resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"2981  integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==29822983chardet@^0.7.0:2984  version "0.7.0"2985  resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"2986  integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==29872988check-error@^1.0.2:2989  version "1.0.2"2990  resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"2991  integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=29922993chokidar@3.4.3:2994  version "3.4.3"2995  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b"2996  integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==2997  dependencies:2998    anymatch "~3.1.1"2999    braces "~3.0.2"3000    glob-parent "~5.1.0"3001    is-binary-path "~2.1.0"3002    is-glob "~4.0.1"3003    normalize-path "~3.0.0"3004    readdirp "~3.5.0"3005  optionalDependencies:3006    fsevents "~2.1.2"30073008chokidar@^3.4.0:3009  version "3.5.1"3010  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a"3011  integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==3012  dependencies:3013    anymatch "~3.1.1"3014    braces "~3.0.2"3015    glob-parent "~5.1.0"3016    is-binary-path "~2.1.0"3017    is-glob "~4.0.1"3018    normalize-path "~3.0.0"3019    readdirp "~3.5.0"3020  optionalDependencies:3021    fsevents "~2.3.1"30223023ci-info@^2.0.0:3024  version "2.0.0"3025  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"3026  integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==30273028ci-info@^3.1.1:3029  version "3.2.0"3030  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6"3031  integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==30323033cipher-base@^1.0.1:3034  version "1.0.4"3035  resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"3036  integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==3037  dependencies:3038    inherits "^2.0.1"3039    safe-buffer "^5.0.1"30403041cjs-module-lexer@^1.0.0:3042  version "1.2.1"3043  resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz#2fd46d9906a126965aa541345c499aaa18e8cd73"3044  integrity sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==30453046class-utils@^0.3.5:3047  version "0.3.6"3048  resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"3049  integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==3050  dependencies:3051    arr-union "^3.1.0"3052    define-property "^0.2.5"3053    isobject "^3.0.0"3054    static-extend "^0.1.1"30553056cli-boxes@^2.2.1:3057  version "2.2.1"3058  resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"3059  integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==30603061cli-cursor@^3.1.0:3062  version "3.1.0"3063  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"3064  integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==3065  dependencies:3066    restore-cursor "^3.1.0"30673068cli-spinners@^2.2.0, cli-spinners@^2.5.0:3069  version "2.5.0"3070  resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047"3071  integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==30723073cli-width@^3.0.0:3074  version "3.0.0"3075  resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"3076  integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==30773078cliui@^5.0.0:3079  version "5.0.0"3080  resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"3081  integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==3082  dependencies:3083    string-width "^3.1.0"3084    strip-ansi "^5.2.0"3085    wrap-ansi "^5.1.0"30863087cliui@^7.0.2:3088  version "7.0.4"3089  resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"3090  integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==3091  dependencies:3092    string-width "^4.2.0"3093    strip-ansi "^6.0.0"3094    wrap-ansi "^7.0.0"30953096clone-deep@^4.0.1:3097  version "4.0.1"3098  resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"3099  integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==3100  dependencies:3101    is-plain-object "^2.0.4"3102    kind-of "^6.0.2"3103    shallow-clone "^3.0.0"31043105clone-response@^1.0.2:3106  version "1.0.2"3107  resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"3108  integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=3109  dependencies:3110    mimic-response "^1.0.0"31113112clone@^1.0.2:3113  version "1.0.4"3114  resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"3115  integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=31163117co@^4.6.0:3118  version "4.6.0"3119  resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"3120  integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=31213122code-point-at@^1.0.0:3123  version "1.1.0"3124  resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"3125  integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=31263127collect-v8-coverage@^1.0.0:3128  version "1.0.1"3129  resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"3130  integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==31313132collection-visit@^1.0.0:3133  version "1.0.0"3134  resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"3135  integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=3136  dependencies:3137    map-visit "^1.0.0"3138    object-visit "^1.0.0"31393140color-convert@^1.9.0:3141  version "1.9.3"3142  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"3143  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==3144  dependencies:3145    color-name "1.1.3"31463147color-convert@^2.0.1:3148  version "2.0.1"3149  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"3150  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==3151  dependencies:3152    color-name "~1.1.4"31533154color-name@1.1.3:3155  version "1.1.3"3156  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"3157  integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=31583159color-name@~1.1.4:3160  version "1.1.4"3161  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"3162  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==31633164colorette@^1.2.1:3165  version "1.2.1"3166  resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"3167  integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==31683169colorette@^1.2.2:3170  version "1.2.2"3171  resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"3172  integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==31733174combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:3175  version "1.0.8"3176  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"3177  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==3178  dependencies:3179    delayed-stream "~1.0.0"31803181commander@^2.12.1, commander@^2.16.0, commander@^2.18.0, commander@^2.20.3, commander@^2.8.1:3182  version "2.20.3"3183  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"3184  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==31853186commander@^4.0.1:3187  version "4.1.1"3188  resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"3189  integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==31903191commander@^6.2.1:3192  version "6.2.1"3193  resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"3194  integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==31953196commondir@^1.0.1:3197  version "1.0.1"3198  resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"3199  integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=32003201component-emitter@^1.2.1:3202  version "1.3.0"3203  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"3204  integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==32053206concat-map@0.0.1:3207  version "0.0.1"3208  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"3209  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=32103211configstore@^5.0.1:3212  version "5.0.1"3213  resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96"3214  integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==3215  dependencies:3216    dot-prop "^5.2.0"3217    graceful-fs "^4.1.2"3218    make-dir "^3.0.0"3219    unique-string "^2.0.0"3220    write-file-atomic "^3.0.0"3221    xdg-basedir "^4.0.0"32223223console-control-strings@^1.0.0:3224  version "1.1.0"3225  resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"3226  integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=32273228consolidate@^0.15.1:3229  version "0.15.1"3230  resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7"3231  integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==3232  dependencies:3233    bluebird "^3.1.1"32343235convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:3236  version "1.7.0"3237  resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"3238  integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==3239  dependencies:3240    safe-buffer "~5.1.1"32413242copy-descriptor@^0.1.0:3243  version "0.1.1"3244  resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"3245  integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=32463247core-js-compat@^3.14.0, core-js-compat@^3.9.1:3248  version "3.14.0"3249  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.14.0.tgz#b574dabf29184681d5b16357bd33d104df3d29a5"3250  integrity sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A==3251  dependencies:3252    browserslist "^4.16.6"3253    semver "7.0.0"32543255core-util-is@1.0.2, core-util-is@~1.0.0:3256  version "1.0.2"3257  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"3258  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=32593260coveralls@^3.1.0:3261  version "3.1.0"3262  resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b"3263  integrity sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==3264  dependencies:3265    js-yaml "^3.13.1"3266    lcov-parse "^1.0.0"3267    log-driver "^1.2.7"3268    minimist "^1.2.5"3269    request "^2.88.2"32703271create-hash@^1.2.0:3272  version "1.2.0"3273  resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"3274  integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==3275  dependencies:3276    cipher-base "^1.0.1"3277    inherits "^2.0.1"3278    md5.js "^1.3.4"3279    ripemd160 "^2.0.1"3280    sha.js "^2.4.0"32813282create-require@^1.1.0:3283  version "1.1.1"3284  resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"3285  integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==32863287cross-spawn@^7.0.2, cross-spawn@^7.0.3:3288  version "7.0.3"3289  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"3290  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==3291  dependencies:3292    path-key "^3.1.0"3293    shebang-command "^2.0.0"3294    which "^2.0.1"32953296crypto-random-string@^2.0.0:3297  version "2.0.0"3298  resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"3299  integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==33003301cssesc@^3.0.0:3302  version "3.0.0"3303  resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"3304  integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==33053306cssom@^0.4.4:3307  version "0.4.4"3308  resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"3309  integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==33103311cssom@~0.3.6:3312  version "0.3.8"3313  resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"3314  integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==33153316cssstyle@^2.3.0:3317  version "2.3.0"3318  resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"3319  integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==3320  dependencies:3321    cssom "~0.3.6"33223323cuint@^0.2.2:3324  version "0.2.2"3325  resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b"3326  integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=33273328d@1, d@^1.0.1:3329  version "1.0.1"3330  resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"3331  integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==3332  dependencies:3333    es5-ext "^0.10.50"3334    type "^1.0.1"33353336dashdash@^1.12.0:3337  version "1.14.1"3338  resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"3339  integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=3340  dependencies:3341    assert-plus "^1.0.0"33423343data-urls@^2.0.0:3344  version "2.0.0"3345  resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"3346  integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==3347  dependencies:3348    abab "^2.0.3"3349    whatwg-mimetype "^2.3.0"3350    whatwg-url "^8.0.0"33513352debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:3353  version "4.3.1"3354  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"3355  integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==3356  dependencies:3357    ms "2.1.2"33583359debug@4.2.0:3360  version "4.2.0"3361  resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"3362  integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==3363  dependencies:3364    ms "2.1.2"33653366debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:3367  version "2.6.9"3368  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"3369  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==3370  dependencies:3371    ms "2.0.0"33723373debug@^3.2.7:3374  version "3.2.7"3375  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"3376  integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==3377  dependencies:3378    ms "^2.1.1"33793380decamelize@^1.2.0:3381  version "1.2.0"3382  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"3383  integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=33843385decamelize@^4.0.0:3386  version "4.0.0"3387  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"3388  integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==33893390decimal.js@^10.2.1:3391  version "10.2.1"3392  resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3"3393  integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==33943395decode-uri-component@^0.2.0:3396  version "0.2.0"3397  resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"3398  integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=33993400decomment@^0.9.3:3401  version "0.9.3"3402  resolved "https://registry.yarnpkg.com/decomment/-/decomment-0.9.3.tgz#b913f32e5fe1113848f516caa5c7afefa9544d38"3403  integrity sha512-5skH5BfUL3n09RDmMVaHS1QGCiZRnl2nArUwmsE9JRY93Ueh3tihYl5wIrDdAuXnoFhxVis/DmRWREO2c6DG3w==3404  dependencies:3405    esprima "4.0.1"34063407decompress-response@^3.3.0:3408  version "3.3.0"3409  resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"3410  integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=3411  dependencies:3412    mimic-response "^1.0.0"34133414decompress-response@^6.0.0:3415  version "6.0.0"3416  resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"3417  integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==3418  dependencies:3419    mimic-response "^3.1.0"34203421dedent@^0.7.0:3422  version "0.7.0"3423  resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"3424  integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=34253426deep-eql@^3.0.1:3427  version "3.0.1"3428  resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"3429  integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==3430  dependencies:3431    type-detect "^4.0.0"34323433deep-extend@^0.6.0:3434  version "0.6.0"3435  resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"3436  integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==34373438deep-is@^0.1.3, deep-is@~0.1.3:3439  version "0.1.3"3440  resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"3441  integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=34423443deepmerge@^4.2.2:3444  version "4.2.2"3445  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"3446  integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==34473448defaults@^1.0.3:3449  version "1.0.3"3450  resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"3451  integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=3452  dependencies:3453    clone "^1.0.2"34543455defer-to-connect@^1.0.1:3456  version "1.1.3"3457  resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"3458  integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==34593460define-properties@^1.1.3:3461  version "1.1.3"3462  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"3463  integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==3464  dependencies:3465    object-keys "^1.0.12"34663467define-property@^0.2.5:3468  version "0.2.5"3469  resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"3470  integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=3471  dependencies:3472    is-descriptor "^0.1.0"34733474define-property@^1.0.0:3475  version "1.0.0"3476  resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"3477  integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=3478  dependencies:3479    is-descriptor "^1.0.0"34803481define-property@^2.0.2:3482  version "2.0.2"3483  resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"3484  integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==3485  dependencies:3486    is-descriptor "^1.0.2"3487    isobject "^3.0.1"34883489delayed-stream@~1.0.0:3490  version "1.0.0"3491  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"3492  integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=34933494dependency-tree@^8.0.0:3495  version "8.0.0"3496  resolved "https://registry.yarnpkg.com/dependency-tree/-/dependency-tree-8.0.0.tgz#59d141bcb53ca59f54e7f7b94013820ddd49b7d7"3497  integrity sha512-zagnV3jgizudEWY3FIFkGCrRr3+GukSMLlw1snIWAOL2beceC22hBXdeNjCnnfPZvbHIPB9DvacSCfD+IoOG3w==3498  dependencies:3499    commander "^2.20.3"3500    debug "^4.3.1"3501    filing-cabinet "^3.0.0"3502    precinct "^7.0.0"3503    typescript "^3.9.7"35043505deprecation@^2.0.0, deprecation@^2.3.1:3506  version "2.3.1"3507  resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"3508  integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==35093510detect-indent@^6.0.0:3511  version "6.0.0"3512  resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd"3513  integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==35143515detect-newline@^3.0.0:3516  version "3.1.0"3517  resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"3518  integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==35193520detective-amd@^3.0.1:3521  version "3.0.1"3522  resolved "https://registry.yarnpkg.com/detective-amd/-/detective-amd-3.0.1.tgz#aca8eddb1f405821953faf4a893d9b9e0430b09e"3523  integrity sha512-vJgluSKkPyo+/McW9hzwmZwY1VPA3BS0VS1agdpPAWAhr65HwC1ox4Ig82rVfGYDYCa4GcKQON5JWBk++2Kf1Q==3524  dependencies:3525    ast-module-types "^2.7.0"3526    escodegen "^1.8.0"3527    get-amd-module-type "^3.0.0"3528    node-source-walk "^4.0.0"35293530detective-cjs@^3.1.1:3531  version "3.1.1"3532  resolved "https://registry.yarnpkg.com/detective-cjs/-/detective-cjs-3.1.1.tgz#18da3e39a002d2098a1123d45ce1de1b0d9045a0"3533  integrity sha512-JQtNTBgFY6h8uT6pgph5QpV3IyxDv+z3qPk/FZRDT9TlFfm5dnRtpH39WtQEr1khqsUxVqXzKjZHpdoQvQbllg==3534  dependencies:3535    ast-module-types "^2.4.0"3536    node-source-walk "^4.0.0"35373538detective-es6@^2.1.0, detective-es6@^2.2.0:3539  version "2.2.0"3540  resolved "https://registry.yarnpkg.com/detective-es6/-/detective-es6-2.2.0.tgz#8f2baba3f8cd90a5cfd748f5ac436f0158ed2585"3541  integrity sha512-fSpNY0SLER7/sVgQZ1NxJPwmc9uCTzNgdkQDhAaj8NPYwr7Qji9QBcmbNvtMCnuuOGMuKn3O7jv0An+/WRWJZQ==3542  dependencies:3543    node-source-walk "^4.0.0"35443545detective-less@^1.0.2:3546  version "1.0.2"3547  resolved "https://registry.yarnpkg.com/detective-less/-/detective-less-1.0.2.tgz#a68af9ca5f69d74b7d0aa190218b211d83b4f7e3"3548  integrity sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==3549  dependencies:3550    debug "^4.0.0"3551    gonzales-pe "^4.2.3"3552    node-source-walk "^4.0.0"35533554detective-postcss@^4.0.0:3555  version "4.0.0"3556  resolved "https://registry.yarnpkg.com/detective-postcss/-/detective-postcss-4.0.0.tgz#24e69b465e5fefe7a6afd05f7e894e34595dbf51"3557  integrity sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==3558  dependencies:3559    debug "^4.1.1"3560    is-url "^1.2.4"3561    postcss "^8.1.7"3562    postcss-values-parser "^2.0.1"35633564detective-sass@^3.0.1:3565  version "3.0.1"3566  resolved "https://registry.yarnpkg.com/detective-sass/-/detective-sass-3.0.1.tgz#496b819efd1f5c4dd3f0e19b43a8634bdd6927c4"3567  integrity sha512-oSbrBozRjJ+QFF4WJFbjPQKeakoaY1GiR380NPqwdbWYd5wfl5cLWv0l6LsJVqrgWfFN1bjFqSeo32Nxza8Lbw==3568  dependencies:3569    debug "^4.1.1"3570    gonzales-pe "^4.2.3"3571    node-source-walk "^4.0.0"35723573detective-scss@^2.0.1:3574  version "2.0.1"3575  resolved "https://registry.yarnpkg.com/detective-scss/-/detective-scss-2.0.1.tgz#06f8c21ae6dedad1fccc26d544892d968083eaf8"3576  integrity sha512-VveyXW4WQE04s05KlJ8K0bG34jtHQVgTc9InspqoQxvnelj/rdgSAy7i2DXAazyQNFKlWSWbS+Ro2DWKFOKTPQ==3577  dependencies:3578    debug "^4.1.1"3579    gonzales-pe "^4.2.3"3580    node-source-walk "^4.0.0"35813582detective-stylus@^1.0.0:3583  version "1.0.0"3584  resolved "https://registry.yarnpkg.com/detective-stylus/-/detective-stylus-1.0.0.tgz#50aee7db8babb990381f010c63fabba5b58e54cd"3585  integrity sha1-UK7n24uruZA4HwEMY/q7pbWOVM0=35863587detective-typescript@^6.0.0:3588  version "6.0.0"3589  resolved "https://registry.yarnpkg.com/detective-typescript/-/detective-typescript-6.0.0.tgz#394062118d7c7da53425647ca41e0081169aa2b3"3590  integrity sha512-vTidcSDK3QostdbrH2Rwf9FhvrgJ4oIaVw5jbolgruTejexk6nNa9DShGpuS8CFVDb1IP86jct5BaZt1wSxpkA==3591  dependencies:3592    "@typescript-eslint/typescript-estree" "^4.8.2"3593    ast-module-types "^2.7.1"3594    node-source-walk "^4.2.0"3595    typescript "^3.9.7"35963597detective-typescript@^7.0.0:3598  version "7.0.0"3599  resolved "https://registry.yarnpkg.com/detective-typescript/-/detective-typescript-7.0.0.tgz#8c8917f2e51d9e4ee49821abf759ff512dd897f2"3600  integrity sha512-y/Ev98AleGvl43YKTNcA2Q+lyFmsmCfTTNWy4cjEJxoLkbobcXtRS0Kvx06daCgr2GdtlwLfNzL553BkktfJoA==3601  dependencies:3602    "@typescript-eslint/typescript-estree" "^4.8.2"3603    ast-module-types "^2.7.1"3604    node-source-walk "^4.2.0"3605    typescript "^3.9.7"36063607diff-sequences@^27.0.1:3608  version "27.0.1"3609  resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.1.tgz#9c9801d52ed5f576ff0a20e3022a13ee6e297e7c"3610  integrity sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==36113612diff@4.0.2, diff@^4.0.1:3613  version "4.0.2"3614  resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"3615  integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==36163617dir-glob@^3.0.1:3618  version "3.0.1"3619  resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"3620  integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==3621  dependencies:3622    path-type "^4.0.0"36233624doctrine@^2.1.0:3625  version "2.1.0"3626  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"3627  integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==3628  dependencies:3629    esutils "^2.0.2"36303631doctrine@^3.0.0:3632  version "3.0.0"3633  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"3634  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==3635  dependencies:3636    esutils "^2.0.2"36373638domexception@^2.0.1:3639  version "2.0.1"3640  resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"3641  integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==3642  dependencies:3643    webidl-conversions "^5.0.0"36443645dot-prop@^5.2.0:3646  version "5.3.0"3647  resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"3648  integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==3649  dependencies:3650    is-obj "^2.0.0"36513652duplexer3@^0.1.4:3653  version "0.1.4"3654  resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"3655  integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=36563657duplexify@^4.1.1:3658  version "4.1.1"3659  resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61"3660  integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==3661  dependencies:3662    end-of-stream "^1.4.1"3663    inherits "^2.0.3"3664    readable-stream "^3.1.1"3665    stream-shift "^1.0.0"36663667ecc-jsbn@~0.1.1:3668  version "0.1.2"3669  resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"3670  integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=3671  dependencies:3672    jsbn "~0.1.0"3673    safer-buffer "^2.1.0"36743675electron-to-chromium@^1.3.723:3676  version "1.3.752"3677  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09"3678  integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==36793680elliptic@^6.5.4:3681  version "6.5.4"3682  resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"3683  integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==3684  dependencies:3685    bn.js "^4.11.9"3686    brorand "^1.1.0"3687    hash.js "^1.0.0"3688    hmac-drbg "^1.0.1"3689    inherits "^2.0.4"3690    minimalistic-assert "^1.0.1"3691    minimalistic-crypto-utils "^1.0.1"36923693email-addresses@^3.0.1:3694  version "3.1.0"3695  resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-3.1.0.tgz#cabf7e085cbdb63008a70319a74e6136188812fb"3696  integrity sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==36973698emittery@^0.8.1:3699  version "0.8.1"3700  resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860"3701  integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==37023703emoji-regex@^7.0.1:3704  version "7.0.3"3705  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"3706  integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==37073708emoji-regex@^8.0.0:3709  version "8.0.0"3710  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"3711  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==37123713end-of-stream@^1.1.0, end-of-stream@^1.4.1:3714  version "1.4.4"3715  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"3716  integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==3717  dependencies:3718    once "^1.4.0"37193720enhanced-resolve@^5.3.2:3721  version "5.7.0"3722  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c"3723  integrity sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==3724  dependencies:3725    graceful-fs "^4.2.4"3726    tapable "^2.2.0"37273728enquirer@^2.3.5:3729  version "2.3.6"3730  resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"3731  integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==3732  dependencies:3733    ansi-colors "^4.1.1"37343735error-ex@^1.3.1:3736  version "1.3.2"3737  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"3738  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==3739  dependencies:3740    is-arrayish "^0.2.1"37413742es-abstract@^1.18.0-next.1:3743  version "1.18.0-next.2"3744  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2"3745  integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==3746  dependencies:3747    call-bind "^1.0.2"3748    es-to-primitive "^1.2.1"3749    function-bind "^1.1.1"3750    get-intrinsic "^1.0.2"3751    has "^1.0.3"3752    has-symbols "^1.0.1"3753    is-callable "^1.2.2"3754    is-negative-zero "^2.0.1"3755    is-regex "^1.1.1"3756    object-inspect "^1.9.0"3757    object-keys "^1.1.1"3758    object.assign "^4.1.2"3759    string.prototype.trimend "^1.0.3"3760    string.prototype.trimstart "^1.0.3"37613762es-abstract@^1.18.0-next.2, es-abstract@^1.18.2:3763  version "1.18.3"3764  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0"3765  integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==3766  dependencies:3767    call-bind "^1.0.2"3768    es-to-primitive "^1.2.1"3769    function-bind "^1.1.1"3770    get-intrinsic "^1.1.1"3771    has "^1.0.3"3772    has-symbols "^1.0.2"3773    is-callable "^1.2.3"3774    is-negative-zero "^2.0.1"3775    is-regex "^1.1.3"3776    is-string "^1.0.6"3777    object-inspect "^1.10.3"3778    object-keys "^1.1.1"3779    object.assign "^4.1.2"3780    string.prototype.trimend "^1.0.4"3781    string.prototype.trimstart "^1.0.4"3782    unbox-primitive "^1.0.1"37833784es-to-primitive@^1.2.1:3785  version "1.2.1"3786  resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"3787  integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==3788  dependencies:3789    is-callable "^1.1.4"3790    is-date-object "^1.0.1"3791    is-symbol "^1.0.2"37923793es5-ext@^0.10.35, es5-ext@^0.10.50:3794  version "0.10.53"3795  resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"3796  integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==3797  dependencies:3798    es6-iterator "~2.0.3"3799    es6-symbol "~3.1.3"3800    next-tick "~1.0.0"38013802es6-iterator@~2.0.3:3803  version "2.0.3"3804  resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"3805  integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=3806  dependencies:3807    d "1"3808    es5-ext "^0.10.35"3809    es6-symbol "^3.1.1"38103811es6-symbol@^3.1.1, es6-symbol@~3.1.3:3812  version "3.1.3"3813  resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"3814  integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==3815  dependencies:3816    d "^1.0.1"3817    ext "^1.1.2"38183819escalade@^3.1.1:3820  version "3.1.1"3821  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"3822  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==38233824escape-goat@^2.0.0:3825  version "2.1.1"3826  resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"3827  integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==38283829escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:3830  version "4.0.0"3831  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"3832  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==38333834escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:3835  version "1.0.5"3836  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"3837  integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=38383839escape-string-regexp@^2.0.0:3840  version "2.0.0"3841  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"3842  integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==38433844escodegen@^1.8.0:3845  version "1.14.3"3846  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"3847  integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==3848  dependencies:3849    esprima "^4.0.1"3850    estraverse "^4.2.0"3851    esutils "^2.0.2"3852    optionator "^0.8.1"3853  optionalDependencies:3854    source-map "~0.6.1"38553856escodegen@^2.0.0:3857  version "2.0.0"3858  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"3859  integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==3860  dependencies:3861    esprima "^4.0.1"3862    estraverse "^5.2.0"3863    esutils "^2.0.2"3864    optionator "^0.8.1"3865  optionalDependencies:3866    source-map "~0.6.1"38673868eslint-config-standard@^16.0.3:3869  version "16.0.3"3870  resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516"3871  integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==38723873eslint-import-resolver-node@^0.3.4:3874  version "0.3.4"3875  resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"3876  integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==3877  dependencies:3878    debug "^2.6.9"3879    resolve "^1.13.1"38803881eslint-module-utils@^2.6.1:3882  version "2.6.1"3883  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233"3884  integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==3885  dependencies:3886    debug "^3.2.7"3887    pkg-dir "^2.0.0"38883889eslint-plugin-es@^3.0.0:3890  version "3.0.1"3891  resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893"3892  integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==3893  dependencies:3894    eslint-utils "^2.0.0"3895    regexpp "^3.0.0"38963897eslint-plugin-header@^3.1.1:3898  version "3.1.1"3899  resolved "https://registry.yarnpkg.com/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz#6ce512432d57675265fac47292b50d1eff11acd6"3900  integrity sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==39013902eslint-plugin-import@^2.23.4:3903  version "2.23.4"3904  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz#8dceb1ed6b73e46e50ec9a5bb2411b645e7d3d97"3905  integrity sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==3906  dependencies:3907    array-includes "^3.1.3"3908    array.prototype.flat "^1.2.4"3909    debug "^2.6.9"3910    doctrine "^2.1.0"3911    eslint-import-resolver-node "^0.3.4"3912    eslint-module-utils "^2.6.1"3913    find-up "^2.0.0"3914    has "^1.0.3"3915    is-core-module "^2.4.0"3916    minimatch "^3.0.4"3917    object.values "^1.1.3"3918    pkg-up "^2.0.0"3919    read-pkg-up "^3.0.0"3920    resolve "^1.20.0"3921    tsconfig-paths "^3.9.0"39223923eslint-plugin-node@^11.1.0:3924  version "11.1.0"3925  resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d"3926  integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==3927  dependencies:3928    eslint-plugin-es "^3.0.0"3929    eslint-utils "^2.0.0"3930    ignore "^5.1.1"3931    minimatch "^3.0.4"3932    resolve "^1.10.1"3933    semver "^6.1.0"39343935eslint-plugin-promise@^5.1.0:3936  version "5.1.0"3937  resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.1.0.tgz#fb2188fb734e4557993733b41aa1a688f46c6f24"3938  integrity sha512-NGmI6BH5L12pl7ScQHbg7tvtk4wPxxj8yPHH47NvSmMtFneC077PSeY3huFj06ZWZvtbfxSPt3RuOQD5XcR4ng==39393940eslint-plugin-react-hooks@^4.2.0:3941  version "4.2.0"3942  resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556"3943  integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==39443945eslint-plugin-react@^7.24.0:3946  version "7.24.0"3947  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4"3948  integrity sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==3949  dependencies:3950    array-includes "^3.1.3"3951    array.prototype.flatmap "^1.2.4"3952    doctrine "^2.1.0"3953    has "^1.0.3"3954    jsx-ast-utils "^2.4.1 || ^3.0.0"3955    minimatch "^3.0.4"3956    object.entries "^1.1.4"3957    object.fromentries "^2.0.4"3958    object.values "^1.1.4"3959    prop-types "^15.7.2"3960    resolve "^2.0.0-next.3"3961    string.prototype.matchall "^4.0.5"39623963eslint-plugin-simple-import-sort@^7.0.0:3964  version "7.0.0"3965  resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz#a1dad262f46d2184a90095a60c66fef74727f0f8"3966  integrity sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==39673968eslint-plugin-sort-destructure-keys@^1.3.5:3969  version "1.3.5"3970  resolved "https://registry.yarnpkg.com/eslint-plugin-sort-destructure-keys/-/eslint-plugin-sort-destructure-keys-1.3.5.tgz#c6f45c3e58d4435564025a6ca5f4a838010800fd"3971  integrity sha512-JmVpidhDsLwZsmRDV7Tf/vZgOAOEQGkLtwToSvX5mD8fuWYS/xkgMRBsalW1fGlc8CgJJwnzropt4oMQ7YCHLg==3972  dependencies:3973    natural-compare-lite "^1.4.0"39743975eslint-scope@^5.1.1:3976  version "5.1.1"3977  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"3978  integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==3979  dependencies:3980    esrecurse "^4.3.0"3981    estraverse "^4.1.1"39823983eslint-utils@^2.0.0, eslint-utils@^2.1.0:3984  version "2.1.0"3985  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"3986  integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==3987  dependencies:3988    eslint-visitor-keys "^1.1.0"39893990eslint-utils@^3.0.0:3991  version "3.0.0"3992  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"3993  integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==3994  dependencies:3995    eslint-visitor-keys "^2.0.0"39963997eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:3998  version "1.3.0"3999  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"4000  integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==40014002eslint-visitor-keys@^2.0.0:4003  version "2.0.0"4004  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"4005  integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==40064007eslint@^7.27.0:4008  version "7.28.0"4009  resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820"4010  integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==4011  dependencies:4012    "@babel/code-frame" "7.12.11"4013    "@eslint/eslintrc" "^0.4.2"4014    ajv "^6.10.0"4015    chalk "^4.0.0"4016    cross-spawn "^7.0.2"4017    debug "^4.0.1"4018    doctrine "^3.0.0"4019    enquirer "^2.3.5"4020    escape-string-regexp "^4.0.0"4021    eslint-scope "^5.1.1"4022    eslint-utils "^2.1.0"4023    eslint-visitor-keys "^2.0.0"4024    espree "^7.3.1"4025    esquery "^1.4.0"4026    esutils "^2.0.2"4027    fast-deep-equal "^3.1.3"4028    file-entry-cache "^6.0.1"4029    functional-red-black-tree "^1.0.1"4030    glob-parent "^5.1.2"4031    globals "^13.6.0"4032    ignore "^4.0.6"4033    import-fresh "^3.0.0"4034    imurmurhash "^0.1.4"4035    is-glob "^4.0.0"4036    js-yaml "^3.13.1"4037    json-stable-stringify-without-jsonify "^1.0.1"4038    levn "^0.4.1"4039    lodash.merge "^4.6.2"4040    minimatch "^3.0.4"4041    natural-compare "^1.4.0"4042    optionator "^0.9.1"4043    progress "^2.0.0"4044    regexpp "^3.1.0"4045    semver "^7.2.1"4046    strip-ansi "^6.0.0"4047    strip-json-comments "^3.1.0"4048    table "^6.0.9"4049    text-table "^0.2.0"4050    v8-compile-cache "^2.0.3"40514052espree@^7.3.0, espree@^7.3.1:4053  version "7.3.1"4054  resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"4055  integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==4056  dependencies:4057    acorn "^7.4.0"4058    acorn-jsx "^5.3.1"4059    eslint-visitor-keys "^1.3.0"40604061esprima@4.0.1, esprima@^4.0.0, esprima@^4.0.1:4062  version "4.0.1"4063  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"4064  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==40654066esquery@^1.4.0:4067  version "1.4.0"4068  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"4069  integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==4070  dependencies:4071    estraverse "^5.1.0"40724073esrecurse@^4.3.0:4074  version "4.3.0"4075  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"4076  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==4077  dependencies:4078    estraverse "^5.2.0"40794080estraverse@^4.1.1, estraverse@^4.2.0:4081  version "4.3.0"4082  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"4083  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==40844085estraverse@^5.1.0, estraverse@^5.2.0:4086  version "5.2.0"4087  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"4088  integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==40894090esutils@^2.0.2:4091  version "2.0.3"4092  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"4093  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==40944095eventemitter3@^4.0.7:4096  version "4.0.7"4097  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"4098  integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==40994100execa@^5.0.0:4101  version "5.1.1"4102  resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"4103  integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==4104  dependencies:4105    cross-spawn "^7.0.3"4106    get-stream "^6.0.0"4107    human-signals "^2.1.0"4108    is-stream "^2.0.0"4109    merge-stream "^2.0.0"4110    npm-run-path "^4.0.1"4111    onetime "^5.1.2"4112    signal-exit "^3.0.3"4113    strip-final-newline "^2.0.0"41144115exit@^0.1.2:4116  version "0.1.2"4117  resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"4118  integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=41194120expand-brackets@^2.1.4:4121  version "2.1.4"4122  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"4123  integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=4124  dependencies:4125    debug "^2.3.3"4126    define-property "^0.2.5"4127    extend-shallow "^2.0.1"4128    posix-character-classes "^0.1.0"4129    regex-not "^1.0.0"4130    snapdragon "^0.8.1"4131    to-regex "^3.0.1"41324133expect@^27.0.2:4134  version "27.0.2"4135  resolved "https://registry.yarnpkg.com/expect/-/expect-27.0.2.tgz#e66ca3a4c9592f1c019fa1d46459a9d2084f3422"4136  integrity sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w==4137  dependencies:4138    "@jest/types" "^27.0.2"4139    ansi-styles "^5.0.0"4140    jest-get-type "^27.0.1"4141    jest-matcher-utils "^27.0.2"4142    jest-message-util "^27.0.2"4143    jest-regex-util "^27.0.1"41444145ext@^1.1.2:4146  version "1.4.0"4147  resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244"4148  integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==4149  dependencies:4150    type "^2.0.0"41514152extend-shallow@^2.0.1:4153  version "2.0.1"4154  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"4155  integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=4156  dependencies:4157    is-extendable "^0.1.0"41584159extend-shallow@^3.0.0, extend-shallow@^3.0.2:4160  version "3.0.2"4161  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"4162  integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=4163  dependencies:4164    assign-symbols "^1.0.0"4165    is-extendable "^1.0.1"41664167extend@~3.0.2:4168  version "3.0.2"4169  resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"4170  integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==41714172external-editor@^3.0.3:4173  version "3.1.0"4174  resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"4175  integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==4176  dependencies:4177    chardet "^0.7.0"4178    iconv-lite "^0.4.24"4179    tmp "^0.0.33"41804181extglob@^2.0.4:4182  version "2.0.4"4183  resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"4184  integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==4185  dependencies:4186    array-unique "^0.3.2"4187    define-property "^1.0.0"4188    expand-brackets "^2.1.4"4189    extend-shallow "^2.0.1"4190    fragment-cache "^0.2.1"4191    regex-not "^1.0.0"4192    snapdragon "^0.8.1"4193    to-regex "^3.0.1"41944195extsprintf@1.3.0:4196  version "1.3.0"4197  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"4198  integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=41994200extsprintf@^1.2.0:4201  version "1.4.0"4202  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"4203  integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=42044205fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:4206  version "3.1.3"4207  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"4208  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==42094210fast-glob@^3.1.1:4211  version "3.2.5"4212  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"4213  integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==4214  dependencies:4215    "@nodelib/fs.stat" "^2.0.2"4216    "@nodelib/fs.walk" "^1.2.3"4217    glob-parent "^5.1.0"4218    merge2 "^1.3.0"4219    micromatch "^4.0.2"4220    picomatch "^2.2.1"42214222fast-json-stable-stringify@^2.0.0:4223  version "2.1.0"4224  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"4225  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==42264227fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:4228  version "2.0.6"4229  resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"4230  integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=42314232fastq@^1.6.0:4233  version "1.10.1"4234  resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.1.tgz#8b8f2ac8bf3632d67afcd65dac248d5fdc45385e"4235  integrity sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==4236  dependencies:4237    reusify "^1.0.4"42384239fb-watchman@^2.0.0:4240  version "2.0.1"4241  resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"4242  integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==4243  dependencies:4244    bser "2.1.1"42454246figures@^3.0.0:4247  version "3.2.0"4248  resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"4249  integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==4250  dependencies:4251    escape-string-regexp "^1.0.5"42524253file-entry-cache@^6.0.1:4254  version "6.0.1"4255  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"4256  integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==4257  dependencies:4258    flat-cache "^3.0.4"42594260filename-reserved-regex@^1.0.0:4261  version "1.0.0"4262  resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4"4263  integrity sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=42644265filenamify-url@^1.0.0:4266  version "1.0.0"4267  resolved "https://registry.yarnpkg.com/filenamify-url/-/filenamify-url-1.0.0.tgz#b32bd81319ef5863b73078bed50f46a4f7975f50"4268  integrity sha1-syvYExnvWGO3MHi+1Q9GpPeXX1A=4269  dependencies:4270    filenamify "^1.0.0"4271    humanize-url "^1.0.0"42724273filenamify@^1.0.0:4274  version "1.2.1"4275  resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5"4276  integrity sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=4277  dependencies:4278    filename-reserved-regex "^1.0.0"4279    strip-outer "^1.0.0"4280    trim-repeated "^1.0.0"42814282filing-cabinet@^3.0.0:4283  version "3.0.0"4284  resolved "https://registry.yarnpkg.com/filing-cabinet/-/filing-cabinet-3.0.0.tgz#08f9ceec5134f4a662926dd45b8a26eca1b5f622"4285  integrity sha512-o8Qac5qxZ1uVidR4Sd7ZQbbqObFZlqXU4xu1suAYg9PQPcQFNTzOmxQa/MehIDMgIvXHTb42mWPNV9l3eHBPSw==4286  dependencies:4287    app-module-path "^2.2.0"4288    commander "^2.20.3"4289    debug "^4.3.1"4290    decomment "^0.9.3"4291    enhanced-resolve "^5.3.2"4292    is-relative-path "^1.0.2"4293    module-definition "^3.3.1"4294    module-lookup-amd "^7.0.0"4295    resolve "^1.19.0"4296    resolve-dependency-path "^2.0.0"4297    sass-lookup "^3.0.0"4298    stylus-lookup "^3.0.1"4299    typescript "^3.9.7"43004301fill-range@^4.0.0:4302  version "4.0.0"4303  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"4304  integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=4305  dependencies:4306    extend-shallow "^2.0.1"4307    is-number "^3.0.0"4308    repeat-string "^1.6.1"4309    to-regex-range "^2.1.0"43104311fill-range@^7.0.1:4312  version "7.0.1"4313  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"4314  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==4315  dependencies:4316    to-regex-range "^5.0.1"43174318find-babel-config@^1.2.0:4319  version "1.2.0"4320  resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2"4321  integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==4322  dependencies:4323    json5 "^0.5.1"4324    path-exists "^3.0.0"43254326find-cache-dir@^2.0.0:4327  version "2.1.0"4328  resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"4329  integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==4330  dependencies:4331    commondir "^1.0.1"4332    make-dir "^2.0.0"4333    pkg-dir "^3.0.0"43344335find-cache-dir@^3.3.1:4336  version "3.3.1"4337  resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"4338  integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==4339  dependencies:4340    commondir "^1.0.1"4341    make-dir "^3.0.2"4342    pkg-dir "^4.1.0"43434344find-index@^0.1.1:4345  version "0.1.1"4346  resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4"4347  integrity sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=43484349find-up@5.0.0:4350  version "5.0.0"4351  resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"4352  integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==4353  dependencies:4354    locate-path "^6.0.0"4355    path-exists "^4.0.0"43564357find-up@^2.0.0, find-up@^2.1.0:4358  version "2.1.0"4359  resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"4360  integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=4361  dependencies:4362    locate-path "^2.0.0"43634364find-up@^3.0.0:4365  version "3.0.0"4366  resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"4367  integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==4368  dependencies:4369    locate-path "^3.0.0"43704371find-up@^4.0.0, find-up@^4.1.0:4372  version "4.1.0"4373  resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"4374  integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==4375  dependencies:4376    locate-path "^5.0.0"4377    path-exists "^4.0.0"43784379flat-cache@^3.0.4:4380  version "3.0.4"4381  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"4382  integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==4383  dependencies:4384    flatted "^3.1.0"4385    rimraf "^3.0.2"43864387flat@^5.0.2:4388  version "5.0.2"4389  resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"4390  integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==43914392flatted@^3.1.0:4393  version "3.1.1"4394  resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"4395  integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==43964397flatten@^1.0.2:4398  version "1.0.3"4399  resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"4400  integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==44014402for-in@^1.0.2:4403  version "1.0.2"4404  resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"4405  integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=44064407forever-agent@~0.6.1:4408  version "0.6.1"4409  resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"4410  integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=44114412form-data@^3.0.0:4413  version "3.0.0"4414  resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682"4415  integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==4416  dependencies:4417    asynckit "^0.4.0"4418    combined-stream "^1.0.8"4419    mime-types "^2.1.12"44204421form-data@~2.3.2:4422  version "2.3.3"4423  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"4424  integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==4425  dependencies:4426    asynckit "^0.4.0"4427    combined-stream "^1.0.6"4428    mime-types "^2.1.12"44294430fragment-cache@^0.2.1:4431  version "0.2.1"4432  resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"4433  integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=4434  dependencies:4435    map-cache "^0.2.2"44364437fs-extra@^10.0.0:4438  version "10.0.0"4439  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1"4440  integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==4441  dependencies:4442    graceful-fs "^4.2.0"4443    jsonfile "^6.0.1"4444    universalify "^2.0.0"44454446fs-extra@^8.1.0:4447  version "8.1.0"4448  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"4449  integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==4450  dependencies:4451    graceful-fs "^4.2.0"4452    jsonfile "^4.0.0"4453    universalify "^0.1.0"44544455fs-readdir-recursive@^1.1.0:4456  version "1.1.0"4457  resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"4458  integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==44594460fs.realpath@^1.0.0:4461  version "1.0.0"4462  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"4463  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=44644465fsevents@^2.3.2, fsevents@~2.3.1:4466  version "2.3.2"4467  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"4468  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==44694470fsevents@~2.1.2:4471  version "2.1.3"4472  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"4473  integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==44744475function-bind@^1.1.1:4476  version "1.1.1"4477  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"4478  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==44794480functional-red-black-tree@^1.0.1:4481  version "1.0.1"4482  resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"4483  integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=44844485gauge@^v2.7.4:4486  version "2.7.4"4487  resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"4488  integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=4489  dependencies:4490    aproba "^1.0.3"4491    console-control-strings "^1.0.0"4492    has-unicode "^2.0.0"4493    object-assign "^4.1.0"4494    signal-exit "^3.0.0"4495    string-width "^1.0.1"4496    strip-ansi "^3.0.1"4497    wide-align "^1.1.0"44984499gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2:4500  version "1.0.0-beta.2"4501  resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"4502  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==45034504get-amd-module-type@^3.0.0:4505  version "3.0.0"4506  resolved "https://registry.yarnpkg.com/get-amd-module-type/-/get-amd-module-type-3.0.0.tgz#bb334662fa04427018c937774570de495845c288"4507  integrity sha512-99Q7COuACPfVt18zH9N4VAMyb81S6TUgJm2NgV6ERtkh9VIkAaByZkW530wl3lLN5KTtSrK9jVLxYsoP5hQKsw==4508  dependencies:4509    ast-module-types "^2.3.2"4510    node-source-walk "^4.0.0"45114512get-caller-file@^2.0.1, get-caller-file@^2.0.5:4513  version "2.0.5"4514  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"4515  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==45164517get-func-name@^2.0.0:4518  version "2.0.0"4519  resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"4520  integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=45214522get-intrinsic@^1.0.1, get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:4523  version "1.1.1"4524  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"4525  integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==4526  dependencies:4527    function-bind "^1.1.1"4528    has "^1.0.3"4529    has-symbols "^1.0.1"45304531get-own-enumerable-property-symbols@^3.0.0:4532  version "3.0.2"4533  resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"4534  integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==45354536get-package-type@^0.1.0:4537  version "0.1.0"4538  resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"4539  integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==45404541get-stream@^4.1.0:4542  version "4.1.0"4543  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"4544  integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==4545  dependencies:4546    pump "^3.0.0"45474548get-stream@^5.1.0:4549  version "5.2.0"4550  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"4551  integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==4552  dependencies:4553    pump "^3.0.0"45544555get-stream@^6.0.0:4556  version "6.0.1"4557  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"4558  integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==45594560get-value@^2.0.3, get-value@^2.0.6:4561  version "2.0.6"4562  resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"4563  integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=45644565getpass@^0.1.1:4566  version "0.1.7"4567  resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"4568  integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=4569  dependencies:4570    assert-plus "^1.0.0"45714572gh-pages@^3.2.0:4573  version "3.2.0"4574  resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-3.2.0.tgz#ac5f9f03dae7622740ff39613ee2cfeacabc680b"4575  integrity sha512-VQTwyRtxoaId0YmDXdC/G854dojpwTuOdpZUL3PGG6WQZvSoGVD8ggedKARZltixIREMezoDywE+g3g2paLxPw==4576  dependencies:4577    async "^2.6.1"4578    commander "^2.18.0"4579    email-addresses "^3.0.1"4580    filenamify-url "^1.0.0"4581    find-cache-dir "^3.3.1"4582    fs-extra "^8.1.0"4583    globby "^6.1.0"45844585gh-release-assets@^2.0.0:4586  version "2.0.0"4587  resolved "https://registry.yarnpkg.com/gh-release-assets/-/gh-release-assets-2.0.0.tgz#1aca1a7a3f2a7ead0eeb43104177cda6cdf1febf"4588  integrity sha512-I+Gy+e86o7A6J7sJRX4uA3EvLlLFcXxsRre22YTJ5dzpl/elZA75bMWfoBd0WVY3Mp9M8KtROfn3zlzDkptyWw==4589  dependencies:4590    async "^3.2.0"4591    mime "^2.4.6"4592    progress-stream "^2.0.0"4593    pumpify "^2.0.1"4594    simple-get "^4.0.0"4595    util-extend "^1.0.1"45964597gh-release@^6.0.0:4598  version "6.0.0"4599  resolved "https://registry.yarnpkg.com/gh-release/-/gh-release-6.0.0.tgz#5e20a914f8dd2579bdebcab56a7e12f497767be6"4600  integrity sha512-FNITfykM63cwMCwLaf/GVkmBVM4xP2FlMD0h2OcDoDhS//3mMtYL3m2sHSMRKzxUjRHPIs7hqIatUzso+4JawQ==4601  dependencies:4602    "@octokit/rest" "^18.0.9"4603    chalk "^4.1.0"4604    changelog-parser "^2.0.0"4605    deep-extend "^0.6.0"4606    gauge "^v2.7.4"4607    gh-release-assets "^2.0.0"4608    ghauth "^5.0.0"4609    github-url-to-object "^4.0.4"4610    inquirer "^8.0.0"4611    shelljs "^0.8.4"4612    update-notifier "^5.0.0"4613    yargs "^17.0.0"46144615ghauth@^5.0.0:4616  version "5.0.1"4617  resolved "https://registry.yarnpkg.com/ghauth/-/ghauth-5.0.1.tgz#ac47c8a4d40504641184c1f8141ada91740ec837"4618  integrity sha512-WzgL12dczZX/VrvVTkoFAJLU3pb6PDT+TS60kLlaU51fuNEv6VoYpRXlnwIjkMIhqWead9+dLBEzj0E1ghYMkg==4619  dependencies:4620    application-config "^2.0.0"4621    node-fetch "^2.6.0"4622    ora "^4.0.5"4623    read "^1.0.7"46244625github-url-to-object@^4.0.4:4626  version "4.0.4"4627  resolved "https://registry.yarnpkg.com/github-url-to-object/-/github-url-to-object-4.0.4.tgz#a9797b7026e18d53b50b07f45b7e169b55fd90ee"4628  integrity sha512-1Ri1pR8XTfzLpbtPz5MlW/amGNdNReuExPsbF9rxLsBfO1GH9RtDBamhJikd0knMWq3RTTQDbTtw0GGvvEAJEA==4629  dependencies:4630    is-url "^1.1.0"46314632glob-parent@^5.1.0, glob-parent@~5.1.0:4633  version "5.1.1"4634  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"4635  integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==4636  dependencies:4637    is-glob "^4.0.1"46384639glob-parent@^5.1.2:4640  version "5.1.2"4641  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"4642  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==4643  dependencies:4644    is-glob "^4.0.1"46454646glob2base@^0.0.12:4647  version "0.0.12"4648  resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"4649  integrity sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=4650  dependencies:4651    find-index "^0.1.1"46524653glob@7.1.6, glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:4654  version "7.1.6"4655  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"4656  integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==4657  dependencies:4658    fs.realpath "^1.0.0"4659    inflight "^1.0.4"4660    inherits "2"4661    minimatch "^3.0.4"4662    once "^1.3.0"4663    path-is-absolute "^1.0.0"46644665glob@^7.1.7:4666  version "7.1.7"4667  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"4668  integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==4669  dependencies:4670    fs.realpath "^1.0.0"4671    inflight "^1.0.4"4672    inherits "2"4673    minimatch "^3.0.4"4674    once "^1.3.0"4675    path-is-absolute "^1.0.0"46764677global-dirs@^3.0.0:4678  version "3.0.0"4679  resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686"4680  integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==4681  dependencies:4682    ini "2.0.0"46834684globals@^11.1.0:4685  version "11.12.0"4686  resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"4687  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==46884689globals@^13.6.0, globals@^13.9.0:4690  version "13.9.0"4691  resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb"4692  integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==4693  dependencies:4694    type-fest "^0.20.2"46954696globby@^11.0.1:4697  version "11.0.2"4698  resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83"4699  integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==4700  dependencies:4701    array-union "^2.1.0"4702    dir-glob "^3.0.1"4703    fast-glob "^3.1.1"4704    ignore "^5.1.4"4705    merge2 "^1.3.0"4706    slash "^3.0.0"47074708globby@^11.0.3:4709  version "11.0.3"4710  resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb"4711  integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==4712  dependencies:4713    array-union "^2.1.0"4714    dir-glob "^3.0.1"4715    fast-glob "^3.1.1"4716    ignore "^5.1.4"4717    merge2 "^1.3.0"4718    slash "^3.0.0"47194720globby@^6.1.0:4721  version "6.1.0"4722  resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"4723  integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=4724  dependencies:4725    array-union "^1.0.1"4726    glob "^7.0.3"4727    object-assign "^4.0.1"4728    pify "^2.0.0"4729    pinkie-promise "^2.0.0"47304731gonzales-pe@^4.2.3:4732  version "4.3.0"4733  resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3"4734  integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==4735  dependencies:4736    minimist "^1.2.5"47374738got@^9.6.0:4739  version "9.6.0"4740  resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"4741  integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==4742  dependencies:4743    "@sindresorhus/is" "^0.14.0"4744    "@szmarczak/http-timer" "^1.1.2"4745    cacheable-request "^6.0.0"4746    decompress-response "^3.3.0"4747    duplexer3 "^0.1.4"4748    get-stream "^4.1.0"4749    lowercase-keys "^1.0.1"4750    mimic-response "^1.0.1"4751    p-cancelable "^1.0.0"4752    to-readable-stream "^1.0.0"4753    url-parse-lax "^3.0.0"47544755graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:4756  version "4.2.6"4757  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"4758  integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==47594760graphviz@0.0.9:4761  version "0.0.9"4762  resolved "https://registry.yarnpkg.com/graphviz/-/graphviz-0.0.9.tgz#0bbf1df588c6a92259282da35323622528c4bbc4"4763  integrity sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg==4764  dependencies:4765    temp "~0.4.0"47664767growl@1.10.5:4768  version "1.10.5"4769  resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"4770  integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==47714772handlebars@^4.7.7:4773  version "4.7.7"4774  resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1"4775  integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==4776  dependencies:4777    minimist "^1.2.5"4778    neo-async "^2.6.0"4779    source-map "^0.6.1"4780    wordwrap "^1.0.0"4781  optionalDependencies:4782    uglify-js "^3.1.4"47834784har-schema@^2.0.0:4785  version "2.0.0"4786  resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"4787  integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=47884789har-validator@~5.1.3:4790  version "5.1.5"4791  resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"4792  integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==4793  dependencies:4794    ajv "^6.12.3"4795    har-schema "^2.0.0"47964797has-bigints@^1.0.1:4798  version "1.0.1"4799  resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"4800  integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==48014802has-flag@^3.0.0:4803  version "3.0.0"4804  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"4805  integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=48064807has-flag@^4.0.0:4808  version "4.0.0"4809  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"4810  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==48114812has-symbols@^1.0.1:4813  version "1.0.1"4814  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"4815  integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==48164817has-symbols@^1.0.2:4818  version "1.0.2"4819  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"4820  integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==48214822has-unicode@^2.0.0:4823  version "2.0.1"4824  resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"4825  integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=48264827has-value@^0.3.1:4828  version "0.3.1"4829  resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"4830  integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=4831  dependencies:4832    get-value "^2.0.3"4833    has-values "^0.1.4"4834    isobject "^2.0.0"48354836has-value@^1.0.0:4837  version "1.0.0"4838  resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"4839  integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=4840  dependencies:4841    get-value "^2.0.6"4842    has-values "^1.0.0"4843    isobject "^3.0.0"48444845has-values@^0.1.4:4846  version "0.1.4"4847  resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"4848  integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=48494850has-values@^1.0.0:4851  version "1.0.0"4852  resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"4853  integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=4854  dependencies:4855    is-number "^3.0.0"4856    kind-of "^4.0.0"48574858has-yarn@^2.1.0:4859  version "2.1.0"4860  resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77"4861  integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==48624863has@^1.0.3:4864  version "1.0.3"4865  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"4866  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==4867  dependencies:4868    function-bind "^1.1.1"48694870hash-base@^3.0.0:4871  version "3.1.0"4872  resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"4873  integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==4874  dependencies:4875    inherits "^2.0.4"4876    readable-stream "^3.6.0"4877    safe-buffer "^5.2.0"48784879hash-sum@^1.0.2:4880  version "1.0.2"4881  resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04"4882  integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=48834884hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7:4885  version "1.1.7"4886  resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"4887  integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==4888  dependencies:4889    inherits "^2.0.3"4890    minimalistic-assert "^1.0.1"48914892he@1.2.0:4893  version "1.2.0"4894  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"4895  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==48964897hmac-drbg@^1.0.1:4898  version "1.0.1"4899  resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"4900  integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=4901  dependencies:4902    hash.js "^1.0.3"4903    minimalistic-assert "^1.0.0"4904    minimalistic-crypto-utils "^1.0.1"49054906hosted-git-info@^2.1.4:4907  version "2.8.8"4908  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"4909  integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==49104911html-encoding-sniffer@^2.0.1:4912  version "2.0.1"4913  resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"4914  integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==4915  dependencies:4916    whatwg-encoding "^1.0.5"49174918html-escaper@^2.0.0:4919  version "2.0.2"4920  resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"4921  integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==49224923http-cache-semantics@^4.0.0:4924  version "4.1.0"4925  resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"4926  integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==49274928http-proxy-agent@^4.0.1:4929  version "4.0.1"4930  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"4931  integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==4932  dependencies:4933    "@tootallnate/once" "1"4934    agent-base "6"4935    debug "4"49364937http-signature@~1.2.0:4938  version "1.2.0"4939  resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"4940  integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=4941  dependencies:4942    assert-plus "^1.0.0"4943    jsprim "^1.2.2"4944    sshpk "^1.7.0"49454946https-proxy-agent@^5.0.0:4947  version "5.0.0"4948  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"4949  integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==4950  dependencies:4951    agent-base "6"4952    debug "4"49534954human-signals@^2.1.0:4955  version "2.1.0"4956  resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"4957  integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==49584959humanize-url@^1.0.0:4960  version "1.0.1"4961  resolved "https://registry.yarnpkg.com/humanize-url/-/humanize-url-1.0.1.tgz#f4ab99e0d288174ca4e1e50407c55fbae464efff"4962  integrity sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8=4963  dependencies:4964    normalize-url "^1.0.0"4965    strip-url-auth "^1.0.0"49664967iconv-lite@0.4.24, iconv-lite@^0.4.24:4968  version "0.4.24"4969  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"4970  integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==4971  dependencies:4972    safer-buffer ">= 2.1.2 < 3"49734974ieee754@^1.1.13:4975  version "1.2.1"4976  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"4977  integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==49784979ignore@^4.0.6:4980  version "4.0.6"4981  resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"4982  integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==49834984ignore@^5.1.1, ignore@^5.1.4:4985  version "5.1.8"4986  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"4987  integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==49884989import-fresh@^3.0.0, import-fresh@^3.2.1:4990  version "3.3.0"4991  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"4992  integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==4993  dependencies:4994    parent-module "^1.0.0"4995    resolve-from "^4.0.0"49964997import-lazy@^2.1.0:4998  version "2.1.0"4999  resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"5000  integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=50015002import-local@^3.0.2:5003  version "3.0.2"5004  resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6"5005  integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==5006  dependencies:5007    pkg-dir "^4.2.0"5008    resolve-cwd "^3.0.0"50095010imurmurhash@^0.1.4:5011  version "0.1.4"5012  resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"5013  integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=50145015indexes-of@^1.0.1:5016  version "1.0.1"5017  resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"5018  integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=50195020inflight@^1.0.4:5021  version "1.0.6"5022  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"5023  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=5024  dependencies:5025    once "^1.3.0"5026    wrappy "1"50275028inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:5029  version "2.0.4"5030  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"5031  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==50325033ini@2.0.0:5034  version "2.0.0"5035  resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"5036  integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==50375038ini@~1.3.0:5039  version "1.3.8"5040  resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"5041  integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==50425043inquirer@^8.0.0:5044  version "8.1.0"5045  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.0.tgz#68ce5ce5376cf0e89765c993d8b7c1e62e184d69"5046  integrity sha512-1nKYPoalt1vMBfCMtpomsUc32wmOoWXAoq3kM/5iTfxyQ2f/BxjixQpC+mbZ7BI0JUXHED4/XPXekDVtJNpXYw==5047  dependencies:5048    ansi-escapes "^4.2.1"5049    chalk "^4.1.1"5050    cli-cursor "^3.1.0"5051    cli-width "^3.0.0"5052    external-editor "^3.0.3"5053    figures "^3.0.0"5054    lodash "^4.17.21"5055    mute-stream "0.0.8"5056    ora "^5.3.0"5057    run-async "^2.4.0"5058    rxjs "^6.6.6"5059    string-width "^4.1.0"5060    strip-ansi "^6.0.0"5061    through "^2.3.6"50625063internal-slot@^1.0.3:5064  version "1.0.3"5065  resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"5066  integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==5067  dependencies:5068    get-intrinsic "^1.1.0"5069    has "^1.0.3"5070    side-channel "^1.0.4"50715072interpret@^1.0.0:5073  version "1.4.0"5074  resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"5075  integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==50765077ip-regex@^4.3.0:5078  version "4.3.0"5079  resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5"5080  integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==50815082is-accessor-descriptor@^0.1.6:5083  version "0.1.6"5084  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"5085  integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=5086  dependencies:5087    kind-of "^3.0.2"50885089is-accessor-descriptor@^1.0.0:5090  version "1.0.0"5091  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"5092  integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==5093  dependencies:5094    kind-of "^6.0.0"50955096is-arrayish@^0.2.1:5097  version "0.2.1"5098  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"5099  integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=51005101is-bigint@^1.0.1:5102  version "1.0.2"5103  resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a"5104  integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==51055106is-binary-path@^1.0.0:5107  version "1.0.1"5108  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"5109  integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=5110  dependencies:5111    binary-extensions "^1.0.0"51125113is-binary-path@~2.1.0:5114  version "2.1.0"5115  resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"5116  integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==5117  dependencies:5118    binary-extensions "^2.0.0"51195120is-boolean-object@^1.1.0:5121  version "1.1.1"5122  resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8"5123  integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==5124  dependencies:5125    call-bind "^1.0.2"51265127is-buffer@^1.1.5:5128  version "1.1.6"5129  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"5130  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==51315132is-callable@^1.1.4, is-callable@^1.2.2, is-callable@^1.2.3:5133  version "1.2.3"5134  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e"5135  integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==51365137is-ci@^2.0.0:5138  version "2.0.0"5139  resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"5140  integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==5141  dependencies:5142    ci-info "^2.0.0"51435144is-ci@^3.0.0:5145  version "3.0.0"5146  resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.0.tgz#c7e7be3c9d8eef7d0fa144390bd1e4b88dc4c994"5147  integrity sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==5148  dependencies:5149    ci-info "^3.1.1"51505151is-core-module@^2.2.0:5152  version "2.2.0"5153  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a"5154  integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==5155  dependencies:5156    has "^1.0.3"51575158is-core-module@^2.4.0:5159  version "2.4.0"5160  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1"5161  integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==5162  dependencies:5163    has "^1.0.3"51645165is-data-descriptor@^0.1.4:5166  version "0.1.4"5167  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"5168  integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=5169  dependencies:5170    kind-of "^3.0.2"51715172is-data-descriptor@^1.0.0:5173  version "1.0.0"5174  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"5175  integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==5176  dependencies:5177    kind-of "^6.0.0"51785179is-date-object@^1.0.1:5180  version "1.0.2"5181  resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"5182  integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==51835184is-descriptor@^0.1.0:5185  version "0.1.6"5186  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"5187  integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==5188  dependencies:5189    is-accessor-descriptor "^0.1.6"5190    is-data-descriptor "^0.1.4"5191    kind-of "^5.0.0"51925193is-descriptor@^1.0.0, is-descriptor@^1.0.2:5194  version "1.0.2"5195  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"5196  integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==5197  dependencies:5198    is-accessor-descriptor "^1.0.0"5199    is-data-descriptor "^1.0.0"5200    kind-of "^6.0.2"52015202is-extendable@^0.1.0, is-extendable@^0.1.1:5203  version "0.1.1"5204  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"5205  integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=52065207is-extendable@^1.0.1:5208  version "1.0.1"5209  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"5210  integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==5211  dependencies:5212    is-plain-object "^2.0.4"52135214is-extglob@^2.1.1:5215  version "2.1.1"5216  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"5217  integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=52185219is-fullwidth-code-point@^1.0.0:5220  version "1.0.0"5221  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"5222  integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=5223  dependencies:5224    number-is-nan "^1.0.0"52255226is-fullwidth-code-point@^2.0.0:5227  version "2.0.0"5228  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"5229  integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=52305231is-fullwidth-code-point@^3.0.0:5232  version "3.0.0"5233  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"5234  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==52355236is-generator-fn@^2.0.0:5237  version "2.1.0"5238  resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"5239  integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==52405241is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:5242  version "4.0.1"5243  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"5244  integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==5245  dependencies:5246    is-extglob "^2.1.1"52475248is-installed-globally@^0.4.0:5249  version "0.4.0"5250  resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520"5251  integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==5252  dependencies:5253    global-dirs "^3.0.0"5254    is-path-inside "^3.0.2"52555256is-interactive@^1.0.0:5257  version "1.0.0"5258  resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"5259  integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==52605261is-negative-zero@^2.0.1:5262  version "2.0.1"5263  resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"5264  integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==52655266is-npm@^5.0.0:5267  version "5.0.0"5268  resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8"5269  integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==52705271is-number-object@^1.0.4:5272  version "1.0.5"5273  resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb"5274  integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==52755276is-number@^3.0.0:5277  version "3.0.0"5278  resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"5279  integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=5280  dependencies:5281    kind-of "^3.0.2"52825283is-number@^7.0.0:5284  version "7.0.0"5285  resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"5286  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==52875288is-obj@^1.0.1:5289  version "1.0.1"5290  resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"5291  integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=52925293is-obj@^2.0.0:5294  version "2.0.0"5295  resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"5296  integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==52975298is-path-inside@^3.0.2:5299  version "3.0.2"5300  resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017"5301  integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==53025303is-plain-obj@^1.0.0:5304  version "1.1.0"5305  resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"5306  integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=53075308is-plain-obj@^2.0.0, is-plain-obj@^2.1.0:5309  version "2.1.0"5310  resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"5311  integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==53125313is-plain-object@^2.0.3, is-plain-object@^2.0.4:5314  version "2.0.4"5315  resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"5316  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==5317  dependencies:5318    isobject "^3.0.1"53195320is-plain-object@^5.0.0:5321  version "5.0.0"5322  resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"5323  integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==53245325is-potential-custom-element-name@^1.0.1:5326  version "1.0.1"5327  resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"5328  integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==53295330is-regex@^1.1.1:5331  version "1.1.2"5332  resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251"5333  integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==5334  dependencies:5335    call-bind "^1.0.2"5336    has-symbols "^1.0.1"53375338is-regex@^1.1.3:5339  version "1.1.3"5340  resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"5341  integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==5342  dependencies:5343    call-bind "^1.0.2"5344    has-symbols "^1.0.2"53455346is-regexp@^1.0.0:5347  version "1.0.0"5348  resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"5349  integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=53505351is-relative-path@^1.0.2:5352  version "1.0.2"5353  resolved "https://registry.yarnpkg.com/is-relative-path/-/is-relative-path-1.0.2.tgz#091b46a0d67c1ed0fe85f1f8cfdde006bb251d46"5354  integrity sha1-CRtGoNZ8HtD+hfH4z93gBrslHUY=53555356is-stream@^2.0.0:5357  version "2.0.0"5358  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"5359  integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==53605361is-string@^1.0.5:5362  version "1.0.5"5363  resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"5364  integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==53655366is-string@^1.0.6:5367  version "1.0.6"5368  resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f"5369  integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==53705371is-symbol@^1.0.2:5372  version "1.0.3"5373  resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"5374  integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==5375  dependencies:5376    has-symbols "^1.0.1"53775378is-symbol@^1.0.3:5379  version "1.0.4"5380  resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"5381  integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==5382  dependencies:5383    has-symbols "^1.0.2"53845385is-typedarray@^1.0.0, is-typedarray@~1.0.0:5386  version "1.0.0"5387  resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"5388  integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=53895390is-unicode-supported@^0.1.0:5391  version "0.1.0"5392  resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"5393  integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==53945395is-url@^1.1.0, is-url@^1.2.4:5396  version "1.2.4"5397  resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"5398  integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==53995400is-windows@^1.0.2:5401  version "1.0.2"5402  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"5403  integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==54045405is-yarn-global@^0.3.0:5406  version "0.3.0"5407  resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"5408  integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==54095410isarray@1.0.0, isarray@~1.0.0:5411  version "1.0.0"5412  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"5413  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=54145415isexe@^2.0.0:5416  version "2.0.0"5417  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"5418  integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=54195420isobject@^2.0.0:5421  version "2.1.0"5422  resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"5423  integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=5424  dependencies:5425    isarray "1.0.0"54265427isobject@^3.0.0, isobject@^3.0.1:5428  version "3.0.1"5429  resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"5430  integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=54315432isstream@~0.1.2:5433  version "0.1.2"5434  resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"5435  integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=54365437istanbul-lib-coverage@^3.0.0:5438  version "3.0.0"5439  resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec"5440  integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==54415442istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3:5443  version "4.0.3"5444  resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d"5445  integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==5446  dependencies:5447    "@babel/core" "^7.7.5"5448    "@istanbuljs/schema" "^0.1.2"5449    istanbul-lib-coverage "^3.0.0"5450    semver "^6.3.0"54515452istanbul-lib-report@^3.0.0:5453  version "3.0.0"5454  resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"5455  integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==5456  dependencies:5457    istanbul-lib-coverage "^3.0.0"5458    make-dir "^3.0.0"5459    supports-color "^7.1.0"54605461istanbul-lib-source-maps@^4.0.0:5462  version "4.0.0"5463  resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9"5464  integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==5465  dependencies:5466    debug "^4.1.1"5467    istanbul-lib-coverage "^3.0.0"5468    source-map "^0.6.1"54695470istanbul-reports@^3.0.2:5471  version "3.0.2"5472  resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b"5473  integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==5474  dependencies:5475    html-escaper "^2.0.0"5476    istanbul-lib-report "^3.0.0"54775478jest-changed-files@^27.0.2:5479  version "27.0.2"5480  resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.0.2.tgz#997253042b4a032950fc5f56abf3c5d1f8560801"5481  integrity sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw==5482  dependencies:5483    "@jest/types" "^27.0.2"5484    execa "^5.0.0"5485    throat "^6.0.1"54865487jest-circus@^27.0.4:5488  version "27.0.4"5489  resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.0.4.tgz#3b261514ee3b3da33def736a6352c98ff56bb6e6"5490  integrity sha512-QD+eblDiRphta630WRKewuASLs/oY1Zki2G4bccntRvrTHQ63ljwFR5TLduuK4Zg0ZPzW0+8o6AP7KRd1yKOjw==5491  dependencies:5492    "@jest/environment" "^27.0.3"5493    "@jest/test-result" "^27.0.2"5494    "@jest/types" "^27.0.2"5495    "@types/node" "*"5496    chalk "^4.0.0"5497    co "^4.6.0"5498    dedent "^0.7.0"5499    expect "^27.0.2"5500    is-generator-fn "^2.0.0"5501    jest-each "^27.0.2"5502    jest-matcher-utils "^27.0.2"5503    jest-message-util "^27.0.2"5504    jest-runtime "^27.0.4"5505    jest-snapshot "^27.0.4"5506    jest-util "^27.0.2"5507    pretty-format "^27.0.2"5508    slash "^3.0.0"5509    stack-utils "^2.0.3"5510    throat "^6.0.1"55115512jest-cli@^27.0.4:5513  version "27.0.4"5514  resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.0.4.tgz#491b12c754c0d7c6873b13a66f26b3a80a852910"5515  integrity sha512-E0T+/i2lxsWAzV7LKYd0SB7HUAvePqaeIh5vX43/G5jXLhv1VzjYzJAGEkTfvxV774ll9cyE2ljcL73PVMEOXQ==5516  dependencies:5517    "@jest/core" "^27.0.4"5518    "@jest/test-result" "^27.0.2"5519    "@jest/types" "^27.0.2"5520    chalk "^4.0.0"5521    exit "^0.1.2"5522    graceful-fs "^4.2.4"5523    import-local "^3.0.2"5524    jest-config "^27.0.4"5525    jest-util "^27.0.2"5526    jest-validate "^27.0.2"5527    prompts "^2.0.1"5528    yargs "^16.0.3"55295530jest-config@^27.0.4:5531  version "27.0.4"5532  resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.0.4.tgz#c4f41378acf40ca77860fb4e213b12109d87b8cf"5533  integrity sha512-VkQFAHWnPQefdvHU9A+G3H/Z3NrrTKqWpvxgQz3nkUdkDTWeKJE6e//BL+R7z79dXOMVksYgM/z6ndtN0hfChg==5534  dependencies:5535    "@babel/core" "^7.1.0"5536    "@jest/test-sequencer" "^27.0.4"5537    "@jest/types" "^27.0.2"5538    babel-jest "^27.0.2"5539    chalk "^4.0.0"5540    deepmerge "^4.2.2"5541    glob "^7.1.1"5542    graceful-fs "^4.2.4"5543    is-ci "^3.0.0"5544    jest-circus "^27.0.4"5545    jest-environment-jsdom "^27.0.3"5546    jest-environment-node "^27.0.3"5547    jest-get-type "^27.0.1"5548    jest-jasmine2 "^27.0.4"5549    jest-regex-util "^27.0.1"5550    jest-resolve "^27.0.4"5551    jest-runner "^27.0.4"5552    jest-util "^27.0.2"5553    jest-validate "^27.0.2"5554    micromatch "^4.0.4"5555    pretty-format "^27.0.2"55565557jest-diff@^27.0.2:5558  version "27.0.2"5559  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.0.2.tgz#f315b87cee5dc134cf42c2708ab27375cc3f5a7e"5560  integrity sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==5561  dependencies:5562    chalk "^4.0.0"5563    diff-sequences "^27.0.1"5564    jest-get-type "^27.0.1"5565    pretty-format "^27.0.2"55665567jest-docblock@^27.0.1:5568  version "27.0.1"5569  resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.1.tgz#bd9752819b49fa4fab1a50b73eb58c653b962e8b"5570  integrity sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==5571  dependencies:5572    detect-newline "^3.0.0"55735574jest-each@^27.0.2:5575  version "27.0.2"5576  resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.0.2.tgz#865ddb4367476ced752167926b656fa0dcecd8c7"5577  integrity sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ==5578  dependencies:5579    "@jest/types" "^27.0.2"5580    chalk "^4.0.0"5581    jest-get-type "^27.0.1"5582    jest-util "^27.0.2"5583    pretty-format "^27.0.2"55845585jest-environment-jsdom@^27.0.3:5586  version "27.0.3"5587  resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.0.3.tgz#ed73e913ddc03864eb9f934b5cbabf1b63504e2e"5588  integrity sha512-5KLmgv1bhiimpSA8oGTnZYk6g4fsNyZiA/6gI2tAZUgrufd7heRUSVh4gRokzZVEj8zlwAQYT0Zs6tuJSW/ECA==5589  dependencies:5590    "@jest/environment" "^27.0.3"5591    "@jest/fake-timers" "^27.0.3"5592    "@jest/types" "^27.0.2"5593    "@types/node" "*"5594    jest-mock "^27.0.3"5595    jest-util "^27.0.2"5596    jsdom "^16.6.0"55975598jest-environment-node@^27.0.3:5599  version "27.0.3"5600  resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.0.3.tgz#b4acb3679d2552a4215732cab8b0ca7ec4398ee0"5601  integrity sha512-co2/IVnIFL3cItpFULCvXFg9us4gvWXgs7mutAMPCbFhcqh56QAOdKhNzC2+RycsC/k4mbMj1VF+9F/NzA0ROg==5602  dependencies:5603    "@jest/environment" "^27.0.3"5604    "@jest/fake-timers" "^27.0.3"5605    "@jest/types" "^27.0.2"5606    "@types/node" "*"5607    jest-mock "^27.0.3"5608    jest-util "^27.0.2"56095610jest-get-type@^27.0.1:5611  version "27.0.1"5612  resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.1.tgz#34951e2b08c8801eb28559d7eb732b04bbcf7815"5613  integrity sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==56145615jest-haste-map@^27.0.2:5616  version "27.0.2"5617  resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.2.tgz#3f1819400c671237e48b4d4b76a80a0dbed7577f"5618  integrity sha512-37gYfrYjjhEfk37C4bCMWAC0oPBxDpG0qpl8lYg8BT//wf353YT/fzgA7+Dq0EtM7rPFS3JEcMsxdtDwNMi2cA==5619  dependencies:5620    "@jest/types" "^27.0.2"5621    "@types/graceful-fs" "^4.1.2"5622    "@types/node" "*"5623    anymatch "^3.0.3"5624    fb-watchman "^2.0.0"5625    graceful-fs "^4.2.4"5626    jest-regex-util "^27.0.1"5627    jest-serializer "^27.0.1"5628    jest-util "^27.0.2"5629    jest-worker "^27.0.2"5630    micromatch "^4.0.4"5631    walker "^1.0.7"5632  optionalDependencies:5633    fsevents "^2.3.2"56345635jest-jasmine2@^27.0.4:5636  version "27.0.4"5637  resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.0.4.tgz#c669519ccf4904a485338555e1e66cad36bb0670"5638  integrity sha512-yj3WrjjquZwkJw+eA4c9yucHw4/+EHndHWSqgHbHGQfT94ihaaQsa009j1a0puU8CNxPDk0c1oAPeOpdJUElwA==5639  dependencies:5640    "@babel/traverse" "^7.1.0"5641    "@jest/environment" "^27.0.3"5642    "@jest/source-map" "^27.0.1"5643    "@jest/test-result" "^27.0.2"5644    "@jest/types" "^27.0.2"5645    "@types/node" "*"5646    chalk "^4.0.0"5647    co "^4.6.0"5648    expect "^27.0.2"5649    is-generator-fn "^2.0.0"5650    jest-each "^27.0.2"5651    jest-matcher-utils "^27.0.2"5652    jest-message-util "^27.0.2"5653    jest-runtime "^27.0.4"5654    jest-snapshot "^27.0.4"5655    jest-util "^27.0.2"5656    pretty-format "^27.0.2"5657    throat "^6.0.1"56585659jest-leak-detector@^27.0.2:5660  version "27.0.2"5661  resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz#ce19aa9dbcf7a72a9d58907a970427506f624e69"5662  integrity sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q==5663  dependencies:5664    jest-get-type "^27.0.1"5665    pretty-format "^27.0.2"56665667jest-matcher-utils@^27.0.2:5668  version "27.0.2"5669  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz#f14c060605a95a466cdc759acc546c6f4cbfc4f0"5670  integrity sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA==5671  dependencies:5672    chalk "^4.0.0"5673    jest-diff "^27.0.2"5674    jest-get-type "^27.0.1"5675    pretty-format "^27.0.2"56765677jest-message-util@^27.0.2:5678  version "27.0.2"5679  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.0.2.tgz#181c9b67dff504d8f4ad15cba10d8b80f272048c"5680  integrity sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw==5681  dependencies:5682    "@babel/code-frame" "^7.12.13"5683    "@jest/types" "^27.0.2"5684    "@types/stack-utils" "^2.0.0"5685    chalk "^4.0.0"5686    graceful-fs "^4.2.4"5687    micromatch "^4.0.4"5688    pretty-format "^27.0.2"5689    slash "^3.0.0"5690    stack-utils "^2.0.3"56915692jest-mock@^27.0.3:5693  version "27.0.3"5694  resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.0.3.tgz#5591844f9192b3335c0dca38e8e45ed297d4d23d"5695  integrity sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q==5696  dependencies:5697    "@jest/types" "^27.0.2"5698    "@types/node" "*"56995700jest-pnp-resolver@^1.2.2:5701  version "1.2.2"5702  resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"5703  integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==57045705jest-regex-util@^27.0.1:5706  version "27.0.1"5707  resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.1.tgz#69d4b1bf5b690faa3490113c47486ed85dd45b68"5708  integrity sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==57095710jest-resolve-dependencies@^27.0.4:5711  version "27.0.4"5712  resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.4.tgz#a07a242d70d668afd3fcf7f4270755eebb1fe579"5713  integrity sha512-F33UPfw1YGWCV2uxJl7wD6TvcQn5IC0LtguwY3r4L7R6H4twpLkp5Q2ZfzRx9A2I3G8feiy0O0sqcn/Qoym71A==5714  dependencies:5715    "@jest/types" "^27.0.2"5716    jest-regex-util "^27.0.1"5717    jest-snapshot "^27.0.4"57185719jest-resolve@^27.0.4:5720  version "27.0.4"5721  resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.0.4.tgz#8a27bc3f2f00c8ea28f3bc99bbf6f468300a703d"5722  integrity sha512-BcfyK2i3cG79PDb/6gB6zFeFQlcqLsQjGBqznFCpA0L/3l1L/oOsltdUjs5eISAWA9HS9qtj8v2PSZr/yWxONQ==5723  dependencies:5724    "@jest/types" "^27.0.2"5725    chalk "^4.0.0"5726    escalade "^3.1.1"5727    graceful-fs "^4.2.4"5728    jest-pnp-resolver "^1.2.2"5729    jest-util "^27.0.2"5730    jest-validate "^27.0.2"5731    resolve "^1.20.0"5732    slash "^3.0.0"57335734jest-runner@^27.0.4:5735  version "27.0.4"5736  resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.0.4.tgz#2787170a9509b792ae129794f6944d27d5d12a4f"5737  integrity sha512-NfmvSYLCsCJk2AG8Ar2NAh4PhsJJpO+/r+g4bKR5L/5jFzx/indUpnVBdrfDvuqhGLLAvrKJ9FM/Nt8o1dsqxg==5738  dependencies:5739    "@jest/console" "^27.0.2"5740    "@jest/environment" "^27.0.3"5741    "@jest/test-result" "^27.0.2"5742    "@jest/transform" "^27.0.2"5743    "@jest/types" "^27.0.2"5744    "@types/node" "*"5745    chalk "^4.0.0"5746    emittery "^0.8.1"5747    exit "^0.1.2"5748    graceful-fs "^4.2.4"5749    jest-docblock "^27.0.1"5750    jest-environment-jsdom "^27.0.3"5751    jest-environment-node "^27.0.3"5752    jest-haste-map "^27.0.2"5753    jest-leak-detector "^27.0.2"5754    jest-message-util "^27.0.2"5755    jest-resolve "^27.0.4"5756    jest-runtime "^27.0.4"5757    jest-util "^27.0.2"5758    jest-worker "^27.0.2"5759    source-map-support "^0.5.6"5760    throat "^6.0.1"57615762jest-runtime@^27.0.4:5763  version "27.0.4"5764  resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.0.4.tgz#2e4a6aa77cac32ac612dfe12768387a8aa15c2f0"5765  integrity sha512-voJB4xbAjS/qYPboV+e+gmg3jfvHJJY4CagFWBOM9dQKtlaiTjcpD2tWwla84Z7PtXSQPeIpXY0qksA9Dum29A==5766  dependencies:5767    "@jest/console" "^27.0.2"5768    "@jest/environment" "^27.0.3"5769    "@jest/fake-timers" "^27.0.3"5770    "@jest/globals" "^27.0.3"5771    "@jest/source-map" "^27.0.1"5772    "@jest/test-result" "^27.0.2"5773    "@jest/transform" "^27.0.2"5774    "@jest/types" "^27.0.2"5775    "@types/yargs" "^16.0.0"5776    chalk "^4.0.0"5777    cjs-module-lexer "^1.0.0"5778    collect-v8-coverage "^1.0.0"5779    exit "^0.1.2"5780    glob "^7.1.3"5781    graceful-fs "^4.2.4"5782    jest-haste-map "^27.0.2"5783    jest-message-util "^27.0.2"5784    jest-mock "^27.0.3"5785    jest-regex-util "^27.0.1"5786    jest-resolve "^27.0.4"5787    jest-snapshot "^27.0.4"5788    jest-util "^27.0.2"5789    jest-validate "^27.0.2"5790    slash "^3.0.0"5791    strip-bom "^4.0.0"5792    yargs "^16.0.3"57935794jest-serializer@^27.0.1:5795  version "27.0.1"5796  resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.1.tgz#2464d04dcc33fb71dc80b7c82e3c5e8a08cb1020"5797  integrity sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==5798  dependencies:5799    "@types/node" "*"5800    graceful-fs "^4.2.4"58015802jest-snapshot@^27.0.4:5803  version "27.0.4"5804  resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.0.4.tgz#2b96e22ca90382b3e93bd0aae2ce4c78bf51fb5b"5805  integrity sha512-hnjrvpKGdSMvKfbHyaG5Kul7pDJGZvjVy0CKpzhu28MmAssDXS6GpynhXzgst1wBQoKD8c9b2VS2a5yhDLQRCA==5806  dependencies:5807    "@babel/core" "^7.7.2"5808    "@babel/generator" "^7.7.2"5809    "@babel/parser" "^7.7.2"5810    "@babel/plugin-syntax-typescript" "^7.7.2"5811    "@babel/traverse" "^7.7.2"5812    "@babel/types" "^7.0.0"5813    "@jest/transform" "^27.0.2"5814    "@jest/types" "^27.0.2"5815    "@types/babel__traverse" "^7.0.4"5816    "@types/prettier" "^2.1.5"5817    babel-preset-current-node-syntax "^1.0.0"5818    chalk "^4.0.0"5819    expect "^27.0.2"5820    graceful-fs "^4.2.4"5821    jest-diff "^27.0.2"5822    jest-get-type "^27.0.1"5823    jest-haste-map "^27.0.2"5824    jest-matcher-utils "^27.0.2"5825    jest-message-util "^27.0.2"5826    jest-resolve "^27.0.4"5827    jest-util "^27.0.2"5828    natural-compare "^1.4.0"5829    pretty-format "^27.0.2"5830    semver "^7.3.2"58315832jest-util@^27.0.2:5833  version "27.0.2"5834  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.2.tgz#fc2c7ace3c75ae561cf1e5fdb643bf685a5be7c7"5835  integrity sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==5836  dependencies:5837    "@jest/types" "^27.0.2"5838    "@types/node" "*"5839    chalk "^4.0.0"5840    graceful-fs "^4.2.4"5841    is-ci "^3.0.0"5842    picomatch "^2.2.3"58435844jest-validate@^27.0.2:5845  version "27.0.2"5846  resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.0.2.tgz#7fe2c100089449cd5cbb47a5b0b6cb7cda5beee5"5847  integrity sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg==5848  dependencies:5849    "@jest/types" "^27.0.2"5850    camelcase "^6.2.0"5851    chalk "^4.0.0"5852    jest-get-type "^27.0.1"5853    leven "^3.1.0"5854    pretty-format "^27.0.2"58555856jest-watcher@^27.0.2:5857  version "27.0.2"5858  resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.0.2.tgz#dab5f9443e2d7f52597186480731a8c6335c5deb"5859  integrity sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA==5860  dependencies:5861    "@jest/test-result" "^27.0.2"5862    "@jest/types" "^27.0.2"5863    "@types/node" "*"5864    ansi-escapes "^4.2.1"5865    chalk "^4.0.0"5866    jest-util "^27.0.2"5867    string-length "^4.0.1"58685869jest-worker@^27.0.2:5870  version "27.0.2"5871  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz#4ebeb56cef48b3e7514552f80d0d80c0129f0b05"5872  integrity sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==5873  dependencies:5874    "@types/node" "*"5875    merge-stream "^2.0.0"5876    supports-color "^8.0.0"58775878jest@^27.0.4:5879  version "27.0.4"5880  resolved "https://registry.yarnpkg.com/jest/-/jest-27.0.4.tgz#91d4d564b36bcf93b98dac1ab19f07089e670f53"5881  integrity sha512-Px1iKFooXgGSkk1H8dJxxBIrM3tsc5SIuI4kfKYK2J+4rvCvPGr/cXktxh0e9zIPQ5g09kOMNfHQEmusBUf/ZA==5882  dependencies:5883    "@jest/core" "^27.0.4"5884    import-local "^3.0.2"5885    jest-cli "^27.0.4"58865887js-sha3@^0.8.0:5888  version "0.8.0"5889  resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"5890  integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==58915892"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:5893  version "4.0.0"5894  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"5895  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==58965897js-yaml@3.14.0:5898  version "3.14.0"5899  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"5900  integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==5901  dependencies:5902    argparse "^1.0.7"5903    esprima "^4.0.0"59045905js-yaml@^3.13.1:5906  version "3.14.1"5907  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"5908  integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==5909  dependencies:5910    argparse "^1.0.7"5911    esprima "^4.0.0"59125913jsbn@~0.1.0:5914  version "0.1.1"5915  resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"5916  integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=59175918jsdom@^16.6.0:5919  version "16.6.0"5920  resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.6.0.tgz#f79b3786682065492a3da6a60a4695da983805ac"5921  integrity sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==5922  dependencies:5923    abab "^2.0.5"5924    acorn "^8.2.4"5925    acorn-globals "^6.0.0"5926    cssom "^0.4.4"5927    cssstyle "^2.3.0"5928    data-urls "^2.0.0"5929    decimal.js "^10.2.1"5930    domexception "^2.0.1"5931    escodegen "^2.0.0"5932    form-data "^3.0.0"5933    html-encoding-sniffer "^2.0.1"5934    http-proxy-agent "^4.0.1"5935    https-proxy-agent "^5.0.0"5936    is-potential-custom-element-name "^1.0.1"5937    nwsapi "^2.2.0"5938    parse5 "6.0.1"5939    saxes "^5.0.1"5940    symbol-tree "^3.2.4"5941    tough-cookie "^4.0.0"5942    w3c-hr-time "^1.0.2"5943    w3c-xmlserializer "^2.0.0"5944    webidl-conversions "^6.1.0"5945    whatwg-encoding "^1.0.5"5946    whatwg-mimetype "^2.3.0"5947    whatwg-url "^8.5.0"5948    ws "^7.4.5"5949    xml-name-validator "^3.0.0"59505951jsesc@^2.5.1:5952  version "2.5.2"5953  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"5954  integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==59555956jsesc@~0.5.0:5957  version "0.5.0"5958  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"5959  integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=59605961json-buffer@3.0.0:5962  version "3.0.0"5963  resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"5964  integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=59655966json-parse-better-errors@^1.0.1:5967  version "1.0.2"5968  resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"5969  integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==59705971json-parse-even-better-errors@^2.3.0:5972  version "2.3.1"5973  resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"5974  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==59755976json-schema-traverse@^0.4.1:5977  version "0.4.1"5978  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"5979  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==59805981json-schema-traverse@^1.0.0:5982  version "1.0.0"5983  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"5984  integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==59855986json-schema@0.2.3:5987  version "0.2.3"5988  resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"5989  integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=59905991json-stable-stringify-without-jsonify@^1.0.1:5992  version "1.0.1"5993  resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"5994  integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=59955996json-stringify-safe@~5.0.1:5997  version "5.0.1"5998  resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"5999  integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=60006001json5@^0.5.1:6002  version "0.5.1"6003  resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"6004  integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=60056006json5@^1.0.1:6007  version "1.0.1"6008  resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"6009  integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==6010  dependencies:6011    minimist "^1.2.0"60126013json5@^2.1.2:6014  version "2.2.0"6015  resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"6016  integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==6017  dependencies:6018    minimist "^1.2.5"60196020jsonfile@^4.0.0:6021  version "4.0.0"6022  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"6023  integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=6024  optionalDependencies:6025    graceful-fs "^4.1.6"60266027jsonfile@^6.0.1:6028  version "6.1.0"6029  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"6030  integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==6031  dependencies:6032    universalify "^2.0.0"6033  optionalDependencies:6034    graceful-fs "^4.1.6"60356036jsprim@^1.2.2:6037  version "1.4.1"6038  resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"6039  integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=6040  dependencies:6041    assert-plus "1.0.0"6042    extsprintf "1.3.0"6043    json-schema "0.2.3"6044    verror "1.10.0"60456046"jsx-ast-utils@^2.4.1 || ^3.0.0":6047  version "3.2.0"6048  resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82"6049  integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==6050  dependencies:6051    array-includes "^3.1.2"6052    object.assign "^4.1.2"60536054keyv@^3.0.0:6055  version "3.1.0"6056  resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"6057  integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==6058  dependencies:6059    json-buffer "3.0.0"60606061kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:6062  version "3.2.2"6063  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"6064  integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=6065  dependencies:6066    is-buffer "^1.1.5"60676068kind-of@^4.0.0:6069  version "4.0.0"6070  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"6071  integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=6072  dependencies:6073    is-buffer "^1.1.5"60746075kind-of@^5.0.0:6076  version "5.1.0"6077  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"6078  integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==60796080kind-of@^6.0.0, kind-of@^6.0.2:6081  version "6.0.3"6082  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"6083  integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==60846085kleur@^3.0.3:6086  version "3.0.3"6087  resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"6088  integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==60896090latest-version@^5.1.0:6091  version "5.1.0"6092  resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"6093  integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==6094  dependencies:6095    package-json "^6.3.0"60966097lcov-parse@^1.0.0:6098  version "1.0.0"6099  resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0"6100  integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A=61016102leven@^3.1.0:6103  version "3.1.0"6104  resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"6105  integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==61066107levn@^0.4.1:6108  version "0.4.1"6109  resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"6110  integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==6111  dependencies:6112    prelude-ls "^1.2.1"6113    type-check "~0.4.0"61146115levn@~0.3.0:6116  version "0.3.0"6117  resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"6118  integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=6119  dependencies:6120    prelude-ls "~1.1.2"6121    type-check "~0.3.2"61226123line-reader@^0.2.4:6124  version "0.2.4"6125  resolved "https://registry.yarnpkg.com/line-reader/-/line-reader-0.2.4.tgz#c4392b587dea38580c9678570e6e8e49fce52622"6126  integrity sha1-xDkrWH3qOFgMlnhXDm6OSfzlJiI=61276128lines-and-columns@^1.1.6:6129  version "1.1.6"6130  resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"6131  integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=61326133load-json-file@^4.0.0:6134  version "4.0.0"6135  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"6136  integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=6137  dependencies:6138    graceful-fs "^4.1.2"6139    parse-json "^4.0.0"6140    pify "^3.0.0"6141    strip-bom "^3.0.0"61426143load-json-file@^6.2.0:6144  version "6.2.0"6145  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1"6146  integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==6147  dependencies:6148    graceful-fs "^4.1.15"6149    parse-json "^5.0.0"6150    strip-bom "^4.0.0"6151    type-fest "^0.6.0"61526153locate-path@^2.0.0:6154  version "2.0.0"6155  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"6156  integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=6157  dependencies:6158    p-locate "^2.0.0"6159    path-exists "^3.0.0"61606161locate-path@^3.0.0:6162  version "3.0.0"6163  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"6164  integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==6165  dependencies:6166    p-locate "^3.0.0"6167    path-exists "^3.0.0"61686169locate-path@^5.0.0:6170  version "5.0.0"6171  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"6172  integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==6173  dependencies:6174    p-locate "^4.1.0"61756176locate-path@^6.0.0:6177  version "6.0.0"6178  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"6179  integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==6180  dependencies:6181    p-locate "^5.0.0"61826183lodash.clonedeep@^4.5.0:6184  version "4.5.0"6185  resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"6186  integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=61876188lodash.debounce@^4.0.8:6189  version "4.0.8"6190  resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"6191  integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=61926193lodash.merge@^4.6.2:6194  version "4.6.2"6195  resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"6196  integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==61976198lodash.sortby@^4.7.0:6199  version "4.7.0"6200  resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"6201  integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=62026203lodash.truncate@^4.4.2:6204  version "4.4.2"6205  resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"6206  integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=62076208lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19:6209  version "4.17.20"6210  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"6211  integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==62126213lodash@^4.17.21, lodash@^4.7.0:6214  version "4.17.21"6215  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"6216  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==62176218log-driver@^1.2.7:6219  version "1.2.7"6220  resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8"6221  integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==62226223log-symbols@4.0.0, log-symbols@^4.0.0:6224  version "4.0.0"6225  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920"6226  integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==6227  dependencies:6228    chalk "^4.0.0"62296230log-symbols@^3.0.0:6231  version "3.0.0"6232  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4"6233  integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==6234  dependencies:6235    chalk "^2.4.2"62366237log-symbols@^4.1.0:6238  version "4.1.0"6239  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"6240  integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==6241  dependencies:6242    chalk "^4.1.0"6243    is-unicode-supported "^0.1.0"62446245loose-envify@^1.4.0:6246  version "1.4.0"6247  resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"6248  integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==6249  dependencies:6250    js-tokens "^3.0.0 || ^4.0.0"62516252lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:6253  version "1.0.1"6254  resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"6255  integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==62566257lowercase-keys@^2.0.0:6258  version "2.0.0"6259  resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"6260  integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==62616262lru-cache@^4.1.2:6263  version "4.1.5"6264  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"6265  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==6266  dependencies:6267    pseudomap "^1.0.2"6268    yallist "^2.1.2"62696270lru-cache@^6.0.0:6271  version "6.0.0"6272  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"6273  integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==6274  dependencies:6275    yallist "^4.0.0"62766277madge@^4.0.2:6278  version "4.0.2"6279  resolved "https://registry.yarnpkg.com/madge/-/madge-4.0.2.tgz#56a3aff8021a5844f8713e0789f6ee94095f2f41"6280  integrity sha512-l5bnA2dvyk0azLKDbOTCI+wDZ6nB007PhvPdmiYlPmqwVi49JPbhQrH/t4u8E6Akp3gwji1GZuA+v/F5q6yoWQ==6281  dependencies:6282    chalk "^4.1.0"6283    commander "^6.2.1"6284    commondir "^1.0.1"6285    debug "^4.0.1"6286    dependency-tree "^8.0.0"6287    detective-amd "^3.0.1"6288    detective-cjs "^3.1.1"6289    detective-es6 "^2.1.0"6290    detective-less "^1.0.2"6291    detective-postcss "^4.0.0"6292    detective-sass "^3.0.1"6293    detective-scss "^2.0.1"6294    detective-stylus "^1.0.0"6295    detective-typescript "^7.0.0"6296    graphviz "0.0.9"6297    ora "^5.1.0"6298    pluralize "^8.0.0"6299    precinct "^7.0.0"6300    pretty-ms "^7.0.0"6301    rc "^1.2.7"6302    typescript "^3.9.5"6303    walkdir "^0.4.1"63046305make-dir@^2.0.0, make-dir@^2.1.0:6306  version "2.1.0"6307  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"6308  integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==6309  dependencies:6310    pify "^4.0.1"6311    semver "^5.6.0"63126313make-dir@^3.0.0, make-dir@^3.0.2:6314  version "3.1.0"6315  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"6316  integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==6317  dependencies:6318    semver "^6.0.0"63196320make-error@^1.1.1:6321  version "1.3.6"6322  resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"6323  integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==63246325makeerror@1.0.x:6326  version "1.0.11"6327  resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"6328  integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=6329  dependencies:6330    tmpl "1.0.x"63316332map-cache@^0.2.2:6333  version "0.2.2"6334  resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"6335  integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=63366337map-visit@^1.0.0:6338  version "1.0.0"6339  resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"6340  integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=6341  dependencies:6342    object-visit "^1.0.0"63436344md5.js@^1.3.4:6345  version "1.3.5"6346  resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"6347  integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==6348  dependencies:6349    hash-base "^3.0.0"6350    inherits "^2.0.1"6351    safe-buffer "^5.1.2"63526353merge-source-map@^1.1.0:6354  version "1.1.0"6355  resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"6356  integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==6357  dependencies:6358    source-map "^0.6.1"63596360merge-stream@^2.0.0:6361  version "2.0.0"6362  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"6363  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==63646365merge2@^1.3.0:6366  version "1.4.1"6367  resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"6368  integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==63696370micromatch@^3.1.10, micromatch@^3.1.4:6371  version "3.1.10"6372  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"6373  integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==6374  dependencies:6375    arr-diff "^4.0.0"6376    array-unique "^0.3.2"6377    braces "^2.3.1"6378    define-property "^2.0.2"6379    extend-shallow "^3.0.2"6380    extglob "^2.0.4"6381    fragment-cache "^0.2.1"6382    kind-of "^6.0.2"6383    nanomatch "^1.2.9"6384    object.pick "^1.3.0"6385    regex-not "^1.0.0"6386    snapdragon "^0.8.1"6387    to-regex "^3.0.2"63886389micromatch@^4.0.2:6390  version "4.0.2"6391  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"6392  integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==6393  dependencies:6394    braces "^3.0.1"6395    picomatch "^2.0.5"63966397micromatch@^4.0.4:6398  version "4.0.4"6399  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"6400  integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==6401  dependencies:6402    braces "^3.0.1"6403    picomatch "^2.2.3"64046405mime-db@1.45.0:6406  version "1.45.0"6407  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea"6408  integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==64096410mime-types@^2.1.12, mime-types@~2.1.19:6411  version "2.1.28"6412  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd"6413  integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==6414  dependencies:6415    mime-db "1.45.0"64166417mime@^2.4.6:6418  version "2.5.0"6419  resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.0.tgz#2b4af934401779806ee98026bb42e8c1ae1876b1"6420  integrity sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag==64216422mimic-fn@^2.1.0:6423  version "2.1.0"6424  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"6425  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==64266427mimic-response@^1.0.0, mimic-response@^1.0.1:6428  version "1.0.1"6429  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"6430  integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==64316432mimic-response@^3.1.0:6433  version "3.1.0"6434  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"6435  integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==64366437minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:6438  version "1.0.1"6439  resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"6440  integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==64416442minimalistic-crypto-utils@^1.0.1:6443  version "1.0.1"6444  resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"6445  integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=64466447minimatch@3.0.4, minimatch@^3.0.4:6448  version "3.0.4"6449  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"6450  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==6451  dependencies:6452    brace-expansion "^1.1.7"64536454minimist@^1.2.0, minimist@^1.2.5:6455  version "1.2.5"6456  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"6457  integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==64586459mixin-deep@^1.2.0:6460  version "1.3.2"6461  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"6462  integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==6463  dependencies:6464    for-in "^1.0.2"6465    is-extendable "^1.0.1"64666467mkdirp@^0.5.1:6468  version "0.5.5"6469  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"6470  integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==6471  dependencies:6472    minimist "^1.2.5"64736474mkdirp@^1.0.4:6475  version "1.0.4"6476  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"6477  integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==64786479mocha@^8.1.1:6480  version "8.2.1"6481  resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.2.1.tgz#f2fa68817ed0e53343d989df65ccd358bc3a4b39"6482  integrity sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==6483  dependencies:6484    "@ungap/promise-all-settled" "1.1.2"6485    ansi-colors "4.1.1"6486    browser-stdout "1.3.1"6487    chokidar "3.4.3"6488    debug "4.2.0"6489    diff "4.0.2"6490    escape-string-regexp "4.0.0"6491    find-up "5.0.0"6492    glob "7.1.6"6493    growl "1.10.5"6494    he "1.2.0"6495    js-yaml "3.14.0"6496    log-symbols "4.0.0"6497    minimatch "3.0.4"6498    ms "2.1.2"6499    nanoid "3.1.12"6500    serialize-javascript "5.0.1"6501    strip-json-comments "3.1.1"6502    supports-color "7.2.0"6503    which "2.0.2"6504    wide-align "1.1.3"6505    workerpool "6.0.2"6506    yargs "13.3.2"6507    yargs-parser "13.1.2"6508    yargs-unparser "2.0.0"65096510module-definition@^3.3.1:6511  version "3.3.1"6512  resolved "https://registry.yarnpkg.com/module-definition/-/module-definition-3.3.1.tgz#fedef71667713e36988b93d0626a4fe7b35aebfc"6513  integrity sha512-kLidGPwQ2yq484nSD+D3JoJp4Etc0Ox9P0L34Pu/cU4X4HcG7k7p62XI5BBuvURWMRX3RPyuhOcBHbKus+UH4A==6514  dependencies:6515    ast-module-types "^2.7.1"6516    node-source-walk "^4.0.0"65176518module-lookup-amd@^7.0.0:6519  version "7.0.1"6520  resolved "https://registry.yarnpkg.com/module-lookup-amd/-/module-lookup-amd-7.0.1.tgz#d67c1a93f2ff8e38b8774b99a638e9a4395774b2"6521  integrity sha512-w9mCNlj0S8qviuHzpakaLVc+/7q50jl9a/kmJ/n8bmXQZgDPkQHnPBb8MUOYh3WpAYkXuNc2c+khsozhIp/amQ==6522  dependencies:6523    commander "^2.8.1"6524    debug "^4.1.0"6525    glob "^7.1.6"6526    requirejs "^2.3.5"6527    requirejs-config-file "^4.0.0"65286529ms@2.0.0:6530  version "2.0.0"6531  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"6532  integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=65336534ms@2.1.2:6535  version "2.1.2"6536  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"6537  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==65386539ms@^2.1.1:6540  version "2.1.3"6541  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"6542  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==65436544mute-stream@0.0.8, mute-stream@~0.0.4:6545  version "0.0.8"6546  resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"6547  integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==65486549nanoid@3.1.12:6550  version "3.1.12"6551  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654"6552  integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==65536554nanoid@^3.1.20:6555  version "3.1.20"6556  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788"6557  integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==65586559nanomatch@^1.2.9:6560  version "1.2.13"6561  resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"6562  integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==6563  dependencies:6564    arr-diff "^4.0.0"6565    array-unique "^0.3.2"6566    define-property "^2.0.2"6567    extend-shallow "^3.0.2"6568    fragment-cache "^0.2.1"6569    is-windows "^1.0.2"6570    kind-of "^6.0.2"6571    object.pick "^1.3.0"6572    regex-not "^1.0.0"6573    snapdragon "^0.8.1"6574    to-regex "^3.0.1"65756576natural-compare-lite@^1.4.0:6577  version "1.4.0"6578  resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4"6579  integrity sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=65806581natural-compare@^1.4.0:6582  version "1.4.0"6583  resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"6584  integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=65856586neo-async@^2.6.0:6587  version "2.6.2"6588  resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"6589  integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==65906591next-tick@~1.0.0:6592  version "1.0.0"6593  resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"6594  integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=65956596node-fetch@^2.6.0, node-fetch@^2.6.1:6597  version "2.6.1"6598  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"6599  integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==66006601node-gyp-build@^4.2.0:6602  version "4.2.3"6603  resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739"6604  integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==66056606node-int64@^0.4.0:6607  version "0.4.0"6608  resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"6609  integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=66106611node-modules-regexp@^1.0.0:6612  version "1.0.0"6613  resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"6614  integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=66156616node-releases@^1.1.71:6617  version "1.1.73"6618  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20"6619  integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==66206621node-source-walk@^4.0.0, node-source-walk@^4.2.0:6622  version "4.2.0"6623  resolved "https://registry.yarnpkg.com/node-source-walk/-/node-source-walk-4.2.0.tgz#c2efe731ea8ba9c03c562aa0a9d984e54f27bc2c"6624  integrity sha512-hPs/QMe6zS94f5+jG3kk9E7TNm4P2SulrKiLWMzKszBfNZvL/V6wseHlTd7IvfW0NZWqPtK3+9yYNr+3USGteA==6625  dependencies:6626    "@babel/parser" "^7.0.0"66276628normalize-package-data@^2.3.2:6629  version "2.5.0"6630  resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"6631  integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==6632  dependencies:6633    hosted-git-info "^2.1.4"6634    resolve "^1.10.0"6635    semver "2 || 3 || 4 || 5"6636    validate-npm-package-license "^3.0.1"66376638normalize-path@^2.1.1:6639  version "2.1.1"6640  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"6641  integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=6642  dependencies:6643    remove-trailing-separator "^1.0.1"66446645normalize-path@^3.0.0, normalize-path@~3.0.0:6646  version "3.0.0"6647  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"6648  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==66496650normalize-url@^1.0.0:6651  version "1.9.1"6652  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"6653  integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=6654  dependencies:6655    object-assign "^4.0.1"6656    prepend-http "^1.0.0"6657    query-string "^4.1.0"6658    sort-keys "^1.0.0"66596660normalize-url@^4.1.0:6661  version "4.5.0"6662  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129"6663  integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==66646665npm-run-path@^4.0.1:6666  version "4.0.1"6667  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"6668  integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==6669  dependencies:6670    path-key "^3.0.0"66716672number-is-nan@^1.0.0:6673  version "1.0.1"6674  resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"6675  integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=66766677nwsapi@^2.2.0:6678  version "2.2.0"6679  resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"6680  integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==66816682oauth-sign@~0.9.0:6683  version "0.9.0"6684  resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"6685  integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==66866687object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:6688  version "4.1.1"6689  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"6690  integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=66916692object-copy@^0.1.0:6693  version "0.1.0"6694  resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"6695  integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=6696  dependencies:6697    copy-descriptor "^0.1.0"6698    define-property "^0.2.5"6699    kind-of "^3.0.3"67006701object-inspect@^1.10.3:6702  version "1.10.3"6703  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369"6704  integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==67056706object-inspect@^1.9.0:6707  version "1.9.0"6708  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a"6709  integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==67106711object-keys@^1.0.12, object-keys@^1.1.1:6712  version "1.1.1"6713  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"6714  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==67156716object-visit@^1.0.0:6717  version "1.0.1"6718  resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"6719  integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=6720  dependencies:6721    isobject "^3.0.0"67226723object.assign@^4.1.0, object.assign@^4.1.2:6724  version "4.1.2"6725  resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"6726  integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==6727  dependencies:6728    call-bind "^1.0.0"6729    define-properties "^1.1.3"6730    has-symbols "^1.0.1"6731    object-keys "^1.1.1"67326733object.entries@^1.1.4:6734  version "1.1.4"6735  resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd"6736  integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==6737  dependencies:6738    call-bind "^1.0.2"6739    define-properties "^1.1.3"6740    es-abstract "^1.18.2"67416742object.fromentries@^2.0.4:6743  version "2.0.4"6744  resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8"6745  integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==6746  dependencies:6747    call-bind "^1.0.2"6748    define-properties "^1.1.3"6749    es-abstract "^1.18.0-next.2"6750    has "^1.0.3"67516752object.pick@^1.3.0:6753  version "1.3.0"6754  resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"6755  integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=6756  dependencies:6757    isobject "^3.0.1"67586759object.values@^1.1.3, object.values@^1.1.4:6760  version "1.1.4"6761  resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30"6762  integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==6763  dependencies:6764    call-bind "^1.0.2"6765    define-properties "^1.1.3"6766    es-abstract "^1.18.2"67676768once@^1.3.0, once@^1.3.1, once@^1.4.0:6769  version "1.4.0"6770  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"6771  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=6772  dependencies:6773    wrappy "1"67746775onetime@^5.1.0, onetime@^5.1.2:6776  version "5.1.2"6777  resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"6778  integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==6779  dependencies:6780    mimic-fn "^2.1.0"67816782optionator@^0.8.1:6783  version "0.8.3"6784  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"6785  integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==6786  dependencies:6787    deep-is "~0.1.3"6788    fast-levenshtein "~2.0.6"6789    levn "~0.3.0"6790    prelude-ls "~1.1.2"6791    type-check "~0.3.2"6792    word-wrap "~1.2.3"67936794optionator@^0.9.1:6795  version "0.9.1"6796  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"6797  integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==6798  dependencies:6799    deep-is "^0.1.3"6800    fast-levenshtein "^2.0.6"6801    levn "^0.4.1"6802    prelude-ls "^1.2.1"6803    type-check "^0.4.0"6804    word-wrap "^1.2.3"68056806ora@^4.0.5:6807  version "4.1.1"6808  resolved "https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc"6809  integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==6810  dependencies:6811    chalk "^3.0.0"6812    cli-cursor "^3.1.0"6813    cli-spinners "^2.2.0"6814    is-interactive "^1.0.0"6815    log-symbols "^3.0.0"6816    mute-stream "0.0.8"6817    strip-ansi "^6.0.0"6818    wcwidth "^1.0.1"68196820ora@^5.1.0:6821  version "5.3.0"6822  resolved "https://registry.yarnpkg.com/ora/-/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f"6823  integrity sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==6824  dependencies:6825    bl "^4.0.3"6826    chalk "^4.1.0"6827    cli-cursor "^3.1.0"6828    cli-spinners "^2.5.0"6829    is-interactive "^1.0.0"6830    log-symbols "^4.0.0"6831    strip-ansi "^6.0.0"6832    wcwidth "^1.0.1"68336834ora@^5.3.0:6835  version "5.4.1"6836  resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"6837  integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==6838  dependencies:6839    bl "^4.1.0"6840    chalk "^4.1.0"6841    cli-cursor "^3.1.0"6842    cli-spinners "^2.5.0"6843    is-interactive "^1.0.0"6844    is-unicode-supported "^0.1.0"6845    log-symbols "^4.1.0"6846    strip-ansi "^6.0.0"6847    wcwidth "^1.0.1"68486849os-tmpdir@~1.0.2:6850  version "1.0.2"6851  resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"6852  integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=68536854p-cancelable@^1.0.0:6855  version "1.1.0"6856  resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"6857  integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==68586859p-each-series@^2.1.0:6860  version "2.2.0"6861  resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a"6862  integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==68636864p-limit@^1.1.0:6865  version "1.3.0"6866  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"6867  integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==6868  dependencies:6869    p-try "^1.0.0"68706871p-limit@^2.0.0, p-limit@^2.2.0:6872  version "2.3.0"6873  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"6874  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==6875  dependencies:6876    p-try "^2.0.0"68776878p-limit@^3.0.2:6879  version "3.1.0"6880  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"6881  integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==6882  dependencies:6883    yocto-queue "^0.1.0"68846885p-locate@^2.0.0:6886  version "2.0.0"6887  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"6888  integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=6889  dependencies:6890    p-limit "^1.1.0"68916892p-locate@^3.0.0:6893  version "3.0.0"6894  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"6895  integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==6896  dependencies:6897    p-limit "^2.0.0"68986899p-locate@^4.1.0:6900  version "4.1.0"6901  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"6902  integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==6903  dependencies:6904    p-limit "^2.2.0"69056906p-locate@^5.0.0:6907  version "5.0.0"6908  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"6909  integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==6910  dependencies:6911    p-limit "^3.0.2"69126913p-try@^1.0.0:6914  version "1.0.0"6915  resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"6916  integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=69176918p-try@^2.0.0:6919  version "2.2.0"6920  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"6921  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==69226923package-json@^6.3.0:6924  version "6.5.0"6925  resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"6926  integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==6927  dependencies:6928    got "^9.6.0"6929    registry-auth-token "^4.0.0"6930    registry-url "^5.0.0"6931    semver "^6.2.0"69326933parent-module@^1.0.0:6934  version "1.0.1"6935  resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"6936  integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==6937  dependencies:6938    callsites "^3.0.0"69396940parse-json@^4.0.0:6941  version "4.0.0"6942  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"6943  integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=6944  dependencies:6945    error-ex "^1.3.1"6946    json-parse-better-errors "^1.0.1"69476948parse-json@^5.0.0:6949  version "5.2.0"6950  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"6951  integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==6952  dependencies:6953    "@babel/code-frame" "^7.0.0"6954    error-ex "^1.3.1"6955    json-parse-even-better-errors "^2.3.0"6956    lines-and-columns "^1.1.6"69576958parse-ms@^2.1.0:6959  version "2.1.0"6960  resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d"6961  integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==69626963parse5@6.0.1:6964  version "6.0.1"6965  resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"6966  integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==69676968pascalcase@^0.1.1:6969  version "0.1.1"6970  resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"6971  integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=69726973path-exists@^3.0.0:6974  version "3.0.0"6975  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"6976  integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=69776978path-exists@^4.0.0:6979  version "4.0.0"6980  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"6981  integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==69826983path-is-absolute@^1.0.0:6984  version "1.0.1"6985  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"6986  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=69876988path-key@^3.0.0, path-key@^3.1.0:6989  version "3.1.1"6990  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"6991  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==69926993path-parse@^1.0.6:6994  version "1.0.6"6995  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"6996  integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==69976998path-type@^3.0.0:6999  version "3.0.0"7000  resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"7001  integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==7002  dependencies:7003    pify "^3.0.0"70047005path-type@^4.0.0:7006  version "4.0.0"7007  resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"7008  integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==70097010pathval@^1.1.0:7011  version "1.1.1"7012  resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"7013  integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==70147015performance-now@^2.1.0:7016  version "2.1.0"7017  resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"7018  integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=70197020picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1:7021  version "2.2.2"7022  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"7023  integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==70247025picomatch@^2.2.3:7026  version "2.3.0"7027  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"7028  integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==70297030pify@^2.0.0:7031  version "2.3.0"7032  resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"7033  integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=70347035pify@^3.0.0:7036  version "3.0.0"7037  resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"7038  integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=70397040pify@^4.0.1:7041  version "4.0.1"7042  resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"7043  integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==70447045pinkie-promise@^2.0.0:7046  version "2.0.1"7047  resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"7048  integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=7049  dependencies:7050    pinkie "^2.0.0"70517052pinkie@^2.0.0:7053  version "2.0.4"7054  resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"7055  integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=70567057pirates@^4.0.0, pirates@^4.0.1:7058  version "4.0.1"7059  resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"7060  integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==7061  dependencies:7062    node-modules-regexp "^1.0.0"70637064pkg-dir@^2.0.0:7065  version "2.0.0"7066  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"7067  integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=7068  dependencies:7069    find-up "^2.1.0"70707071pkg-dir@^3.0.0:7072  version "3.0.0"7073  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"7074  integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==7075  dependencies:7076    find-up "^3.0.0"70777078pkg-dir@^4.1.0, pkg-dir@^4.2.0:7079  version "4.2.0"7080  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"7081  integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==7082  dependencies:7083    find-up "^4.0.0"70847085pkg-up@^2.0.0:7086  version "2.0.0"7087  resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f"7088  integrity sha1-yBmscoBZpGHKscOImivjxJoATX8=7089  dependencies:7090    find-up "^2.1.0"70917092pkg-up@^3.1.0:7093  version "3.1.0"7094  resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"7095  integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==7096  dependencies:7097    find-up "^3.0.0"70987099pluralize@^8.0.0:7100  version "8.0.0"7101  resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1"7102  integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==71037104posix-character-classes@^0.1.0:7105  version "0.1.1"7106  resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"7107  integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=71087109postcss-selector-parser@^6.0.2:7110  version "6.0.4"7111  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3"7112  integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==7113  dependencies:7114    cssesc "^3.0.0"7115    indexes-of "^1.0.1"7116    uniq "^1.0.1"7117    util-deprecate "^1.0.2"71187119postcss-values-parser@^2.0.1:7120  version "2.0.1"7121  resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f"7122  integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==7123  dependencies:7124    flatten "^1.0.2"7125    indexes-of "^1.0.1"7126    uniq "^1.0.1"71277128postcss@^7.0.14:7129  version "7.0.35"7130  resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24"7131  integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==7132  dependencies:7133    chalk "^2.4.2"7134    source-map "^0.6.1"7135    supports-color "^6.1.0"71367137postcss@^8.1.7:7138  version "8.2.6"7139  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.6.tgz#5d69a974543b45f87e464bc4c3e392a97d6be9fe"7140  integrity sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg==7141  dependencies:7142    colorette "^1.2.1"7143    nanoid "^3.1.20"7144    source-map "^0.6.1"71457146precinct@^7.0.0:7147  version "7.0.0"7148  resolved "https://registry.yarnpkg.com/precinct/-/precinct-7.0.0.tgz#37334165dee5d28f469202a910787cb2fb6a9186"7149  integrity sha512-ayTxq+fdaoowk4HvdfBs7bChg4ToqdRxjZqy3611dppelGF8UHQZrLta3GolRLoHSJQtKfBGA35IvW8K3tRR7A==7150  dependencies:7151    commander "^2.20.3"7152    debug "^4.3.1"7153    detective-amd "^3.0.1"7154    detective-cjs "^3.1.1"7155    detective-es6 "^2.2.0"7156    detective-less "^1.0.2"7157    detective-postcss "^4.0.0"7158    detective-sass "^3.0.1"7159    detective-scss "^2.0.1"7160    detective-stylus "^1.0.0"7161    detective-typescript "^6.0.0"7162    module-definition "^3.3.1"7163    node-source-walk "^4.2.0"71647165prelude-ls@^1.2.1:7166  version "1.2.1"7167  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"7168  integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==71697170prelude-ls@~1.1.2:7171  version "1.1.2"7172  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"7173  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=71747175prepend-http@^1.0.0:7176  version "1.0.4"7177  resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"7178  integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=71797180prepend-http@^2.0.0:7181  version "2.0.0"7182  resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"7183  integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=71847185prettier@^1.18.2:7186  version "1.19.1"7187  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"7188  integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==71897190prettier@^2.3.0:7191  version "2.3.1"7192  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6"7193  integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==71947195pretty-format@^27.0.2:7196  version "27.0.2"7197  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.2.tgz#9283ff8c4f581b186b2d4da461617143dca478a4"7198  integrity sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==7199  dependencies:7200    "@jest/types" "^27.0.2"7201    ansi-regex "^5.0.0"7202    ansi-styles "^5.0.0"7203    react-is "^17.0.1"72047205pretty-ms@^7.0.0:7206  version "7.0.1"7207  resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8"7208  integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==7209  dependencies:7210    parse-ms "^2.1.0"72117212process-nextick-args@~2.0.0:7213  version "2.0.1"7214  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"7215  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==72167217progress-stream@^2.0.0:7218  version "2.0.0"7219  resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-2.0.0.tgz#fac63a0b3d11deacbb0969abcc93b214bce19ed5"7220  integrity sha1-+sY6Cz0R3qy7CWmrzJOyFLzhntU=7221  dependencies:7222    speedometer "~1.0.0"7223    through2 "~2.0.3"72247225progress@^2.0.0:7226  version "2.0.3"7227  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"7228  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==72297230prompts@^2.0.1:7231  version "2.4.0"7232  resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7"7233  integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==7234  dependencies:7235    kleur "^3.0.3"7236    sisteransi "^1.0.5"72377238prop-types@^15.7.2:7239  version "15.7.2"7240  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"7241  integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==7242  dependencies:7243    loose-envify "^1.4.0"7244    object-assign "^4.1.1"7245    react-is "^16.8.1"72467247pseudomap@^1.0.2:7248  version "1.0.2"7249  resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"7250  integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=72517252psl@^1.1.28, psl@^1.1.33:7253  version "1.8.0"7254  resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"7255  integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==72567257pump@^3.0.0:7258  version "3.0.0"7259  resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"7260  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==7261  dependencies:7262    end-of-stream "^1.1.0"7263    once "^1.3.1"72647265pumpify@^2.0.1:7266  version "2.0.1"7267  resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e"7268  integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==7269  dependencies:7270    duplexify "^4.1.1"7271    inherits "^2.0.3"7272    pump "^3.0.0"72737274punycode@^2.1.0, punycode@^2.1.1:7275  version "2.1.1"7276  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"7277  integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==72787279pupa@^2.1.1:7280  version "2.1.1"7281  resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62"7282  integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==7283  dependencies:7284    escape-goat "^2.0.0"72857286qs@~6.5.2:7287  version "6.5.2"7288  resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"7289  integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==72907291query-string@^4.1.0:7292  version "4.3.4"7293  resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"7294  integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s=7295  dependencies:7296    object-assign "^4.1.0"7297    strict-uri-encode "^1.0.0"72987299queue-microtask@^1.2.2:7300  version "1.2.2"7301  resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3"7302  integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==73037304randombytes@^2.1.0:7305  version "2.1.0"7306  resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"7307  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==7308  dependencies:7309    safe-buffer "^5.1.0"73107311rc@^1.2.7, rc@^1.2.8:7312  version "1.2.8"7313  resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"7314  integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==7315  dependencies:7316    deep-extend "^0.6.0"7317    ini "~1.3.0"7318    minimist "^1.2.0"7319    strip-json-comments "~2.0.1"73207321react-is@^16.8.1:7322  version "16.13.1"7323  resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"7324  integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==73257326react-is@^17.0.1:7327  version "17.0.1"7328  resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339"7329  integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==73307331read-pkg-up@^3.0.0:7332  version "3.0.0"7333  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"7334  integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=7335  dependencies:7336    find-up "^2.0.0"7337    read-pkg "^3.0.0"73387339read-pkg@^3.0.0:7340  version "3.0.0"7341  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"7342  integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=7343  dependencies:7344    load-json-file "^4.0.0"7345    normalize-package-data "^2.3.2"7346    path-type "^3.0.0"73477348read@^1.0.7:7349  version "1.0.7"7350  resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"7351  integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=7352  dependencies:7353    mute-stream "~0.0.4"73547355readable-stream@^2.0.2, readable-stream@~2.3.6:7356  version "2.3.7"7357  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"7358  integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==7359  dependencies:7360    core-util-is "~1.0.0"7361    inherits "~2.0.3"7362    isarray "~1.0.0"7363    process-nextick-args "~2.0.0"7364    safe-buffer "~5.1.1"7365    string_decoder "~1.1.1"7366    util-deprecate "~1.0.1"73677368readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:7369  version "3.6.0"7370  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"7371  integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==7372  dependencies:7373    inherits "^2.0.3"7374    string_decoder "^1.1.1"7375    util-deprecate "^1.0.1"73767377readdirp@^2.2.1:7378  version "2.2.1"7379  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"7380  integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==7381  dependencies:7382    graceful-fs "^4.1.11"7383    micromatch "^3.1.10"7384    readable-stream "^2.0.2"73857386readdirp@~3.5.0:7387  version "3.5.0"7388  resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"7389  integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==7390  dependencies:7391    picomatch "^2.2.1"73927393rechoir@^0.6.2:7394  version "0.6.2"7395  resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"7396  integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=7397  dependencies:7398    resolve "^1.1.6"73997400regenerate-unicode-properties@^8.2.0:7401  version "8.2.0"7402  resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"7403  integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==7404  dependencies:7405    regenerate "^1.4.0"74067407regenerate@^1.4.0:7408  version "1.4.2"7409  resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"7410  integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==74117412regenerator-runtime@^0.13.4:7413  version "0.13.7"7414  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"7415  integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==74167417regenerator-transform@^0.14.2:7418  version "0.14.5"7419  resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4"7420  integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==7421  dependencies:7422    "@babel/runtime" "^7.8.4"74237424regex-not@^1.0.0, regex-not@^1.0.2:7425  version "1.0.2"7426  resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"7427  integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==7428  dependencies:7429    extend-shallow "^3.0.2"7430    safe-regex "^1.1.0"74317432regexp.prototype.flags@^1.3.1:7433  version "1.3.1"7434  resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"7435  integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==7436  dependencies:7437    call-bind "^1.0.2"7438    define-properties "^1.1.3"74397440regexpp@^3.0.0, regexpp@^3.1.0:7441  version "3.1.0"7442  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"7443  integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==74447445regexpu-core@^4.7.1:7446  version "4.7.1"7447  resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6"7448  integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==7449  dependencies:7450    regenerate "^1.4.0"7451    regenerate-unicode-properties "^8.2.0"7452    regjsgen "^0.5.1"7453    regjsparser "^0.6.4"7454    unicode-match-property-ecmascript "^1.0.4"7455    unicode-match-property-value-ecmascript "^1.2.0"74567457registry-auth-token@^4.0.0:7458  version "4.2.1"7459  resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250"7460  integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==7461  dependencies:7462    rc "^1.2.8"74637464registry-url@^5.0.0:7465  version "5.1.0"7466  resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009"7467  integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==7468  dependencies:7469    rc "^1.2.8"74707471regjsgen@^0.5.1:7472  version "0.5.2"7473  resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"7474  integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==74757476regjsparser@^0.6.4:7477  version "0.6.7"7478  resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.7.tgz#c00164e1e6713c2e3ee641f1701c4b7aa0a7f86c"7479  integrity sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ==7480  dependencies:7481    jsesc "~0.5.0"74827483remove-markdown@^0.2.2:7484  version "0.2.2"7485  resolved "https://registry.yarnpkg.com/remove-markdown/-/remove-markdown-0.2.2.tgz#66b0ceeba9fb77ca9636bb1b0307ce21a32a12a6"7486  integrity sha1-ZrDO66n7d8qWNrsbAwfOIaMqEqY=74877488remove-trailing-separator@^1.0.1:7489  version "1.1.0"7490  resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"7491  integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=74927493repeat-element@^1.1.2:7494  version "1.1.3"7495  resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"7496  integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==74977498repeat-string@^1.6.1:7499  version "1.6.1"7500  resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"7501  integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=75027503request@^2.88.2:7504  version "2.88.2"7505  resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"7506  integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==7507  dependencies:7508    aws-sign2 "~0.7.0"7509    aws4 "^1.8.0"7510    caseless "~0.12.0"7511    combined-stream "~1.0.6"7512    extend "~3.0.2"7513    forever-agent "~0.6.1"7514    form-data "~2.3.2"7515    har-validator "~5.1.3"7516    http-signature "~1.2.0"7517    is-typedarray "~1.0.0"7518    isstream "~0.1.2"7519    json-stringify-safe "~5.0.1"7520    mime-types "~2.1.19"7521    oauth-sign "~0.9.0"7522    performance-now "^2.1.0"7523    qs "~6.5.2"7524    safe-buffer "^5.1.2"7525    tough-cookie "~2.5.0"7526    tunnel-agent "^0.6.0"7527    uuid "^3.3.2"75287529require-directory@^2.1.1:7530  version "2.1.1"7531  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"7532  integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=75337534require-from-string@^2.0.2:7535  version "2.0.2"7536  resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"7537  integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==75387539require-main-filename@^2.0.0:7540  version "2.0.0"7541  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"7542  integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==75437544requirejs-config-file@^4.0.0:7545  version "4.0.0"7546  resolved "https://registry.yarnpkg.com/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz#4244da5dd1f59874038cc1091d078d620abb6ebc"7547  integrity sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==7548  dependencies:7549    esprima "^4.0.0"7550    stringify-object "^3.2.1"75517552requirejs@^2.3.5:7553  version "2.3.6"7554  resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.6.tgz#e5093d9601c2829251258c0b9445d4d19fa9e7c9"7555  integrity sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==75567557reselect@^4.0.0:7558  version "4.0.0"7559  resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7"7560  integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==75617562resolve-cwd@^3.0.0:7563  version "3.0.0"7564  resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"7565  integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==7566  dependencies:7567    resolve-from "^5.0.0"75687569resolve-dependency-path@^2.0.0:7570  version "2.0.0"7571  resolved "https://registry.yarnpkg.com/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz#11700e340717b865d216c66cabeb4a2a3c696736"7572  integrity sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==75737574resolve-from@^4.0.0:7575  version "4.0.0"7576  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"7577  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==75787579resolve-from@^5.0.0:7580  version "5.0.0"7581  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"7582  integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==75837584resolve-url@^0.2.1:7585  version "0.2.1"7586  resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"7587  integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=75887589resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.3.2:7590  version "1.20.0"7591  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"7592  integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==7593  dependencies:7594    is-core-module "^2.2.0"7595    path-parse "^1.0.6"75967597resolve@^2.0.0-next.3:7598  version "2.0.0-next.3"7599  resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46"7600  integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==7601  dependencies:7602    is-core-module "^2.2.0"7603    path-parse "^1.0.6"76047605responselike@^1.0.2:7606  version "1.0.2"7607  resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"7608  integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=7609  dependencies:7610    lowercase-keys "^1.0.0"76117612restore-cursor@^3.1.0:7613  version "3.1.0"7614  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"7615  integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==7616  dependencies:7617    onetime "^5.1.0"7618    signal-exit "^3.0.2"76197620ret@~0.1.10:7621  version "0.1.15"7622  resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"7623  integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==76247625reusify@^1.0.4:7626  version "1.0.4"7627  resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"7628  integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==76297630rimraf@^3.0.0, rimraf@^3.0.2:7631  version "3.0.2"7632  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"7633  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==7634  dependencies:7635    glob "^7.1.3"76367637ripemd160@^2.0.1:7638  version "2.0.2"7639  resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"7640  integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==7641  dependencies:7642    hash-base "^3.0.0"7643    inherits "^2.0.1"76447645run-async@^2.4.0:7646  version "2.4.1"7647  resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"7648  integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==76497650run-parallel@^1.1.9:7651  version "1.2.0"7652  resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"7653  integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==7654  dependencies:7655    queue-microtask "^1.2.2"76567657rxjs@^6.6.6, rxjs@^6.6.7:7658  version "6.6.7"7659  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"7660  integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==7661  dependencies:7662    tslib "^1.9.0"76637664safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:7665  version "5.2.1"7666  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"7667  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==76687669safe-buffer@~5.1.0, safe-buffer@~5.1.1:7670  version "5.1.2"7671  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"7672  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==76737674safe-regex@^1.1.0:7675  version "1.1.0"7676  resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"7677  integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=7678  dependencies:7679    ret "~0.1.10"76807681"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:7682  version "2.1.2"7683  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"7684  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==76857686sass-lookup@^3.0.0:7687  version "3.0.0"7688  resolved "https://registry.yarnpkg.com/sass-lookup/-/sass-lookup-3.0.0.tgz#3b395fa40569738ce857bc258e04df2617c48cac"7689  integrity sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg==7690  dependencies:7691    commander "^2.16.0"76927693saxes@^5.0.1:7694  version "5.0.1"7695  resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"7696  integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==7697  dependencies:7698    xmlchars "^2.2.0"76997700scryptsy@^2.1.0:7701  version "2.1.0"7702  resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790"7703  integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==77047705semver-diff@^3.1.1:7706  version "3.1.1"7707  resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b"7708  integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==7709  dependencies:7710    semver "^6.3.0"77117712"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.6.0:7713  version "5.7.1"7714  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"7715  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==77167717semver@7.0.0:7718  version "7.0.0"7719  resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"7720  integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==77217722semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:7723  version "6.3.0"7724  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"7725  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==77267727semver@^7.2.1, semver@^7.3.2, semver@^7.3.4:7728  version "7.3.4"7729  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"7730  integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==7731  dependencies:7732    lru-cache "^6.0.0"77337734semver@^7.3.5:7735  version "7.3.5"7736  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"7737  integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==7738  dependencies:7739    lru-cache "^6.0.0"77407741serialize-javascript@5.0.1:7742  version "5.0.1"7743  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4"7744  integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==7745  dependencies:7746    randombytes "^2.1.0"77477748set-blocking@^2.0.0:7749  version "2.0.0"7750  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"7751  integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=77527753set-value@^2.0.0, set-value@^2.0.1:7754  version "2.0.1"7755  resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"7756  integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==7757  dependencies:7758    extend-shallow "^2.0.1"7759    is-extendable "^0.1.1"7760    is-plain-object "^2.0.3"7761    split-string "^3.0.1"77627763sha.js@^2.4.0:7764  version "2.4.11"7765  resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"7766  integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==7767  dependencies:7768    inherits "^2.0.1"7769    safe-buffer "^5.0.1"77707771shallow-clone@^3.0.0:7772  version "3.0.1"7773  resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"7774  integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==7775  dependencies:7776    kind-of "^6.0.2"77777778shebang-command@^2.0.0:7779  version "2.0.0"7780  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"7781  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==7782  dependencies:7783    shebang-regex "^3.0.0"77847785shebang-regex@^3.0.0:7786  version "3.0.0"7787  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"7788  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==77897790shelljs@^0.8.4:7791  version "0.8.4"7792  resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2"7793  integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==7794  dependencies:7795    glob "^7.0.0"7796    interpret "^1.0.0"7797    rechoir "^0.6.2"77987799side-channel@^1.0.4:7800  version "1.0.4"7801  resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"7802  integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==7803  dependencies:7804    call-bind "^1.0.0"7805    get-intrinsic "^1.0.2"7806    object-inspect "^1.9.0"78077808signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:7809  version "3.0.3"7810  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"7811  integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==78127813simple-concat@^1.0.0:7814  version "1.0.1"7815  resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"7816  integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==78177818simple-get@^4.0.0:7819  version "4.0.0"7820  resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.0.tgz#73fa628278d21de83dadd5512d2cc1f4872bd675"7821  integrity sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==7822  dependencies:7823    decompress-response "^6.0.0"7824    once "^1.3.1"7825    simple-concat "^1.0.0"78267827sisteransi@^1.0.5:7828  version "1.0.5"7829  resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"7830  integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==78317832slash@^2.0.0:7833  version "2.0.0"7834  resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"7835  integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==78367837slash@^3.0.0:7838  version "3.0.0"7839  resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"7840  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==78417842slice-ansi@^4.0.0:7843  version "4.0.0"7844  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"7845  integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==7846  dependencies:7847    ansi-styles "^4.0.0"7848    astral-regex "^2.0.0"7849    is-fullwidth-code-point "^3.0.0"78507851snapdragon-node@^2.0.1:7852  version "2.1.1"7853  resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"7854  integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==7855  dependencies:7856    define-property "^1.0.0"7857    isobject "^3.0.0"7858    snapdragon-util "^3.0.1"78597860snapdragon-util@^3.0.1:7861  version "3.0.1"7862  resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"7863  integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==7864  dependencies:7865    kind-of "^3.2.0"78667867snapdragon@^0.8.1:7868  version "0.8.2"7869  resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"7870  integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==7871  dependencies:7872    base "^0.11.1"7873    debug "^2.2.0"7874    define-property "^0.2.5"7875    extend-shallow "^2.0.1"7876    map-cache "^0.2.2"7877    source-map "^0.5.6"7878    source-map-resolve "^0.5.0"7879    use "^3.1.0"78807881sort-keys@^1.0.0:7882  version "1.1.2"7883  resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"7884  integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0=7885  dependencies:7886    is-plain-obj "^1.0.0"78877888sort-keys@^4.0.0:7889  version "4.2.0"7890  resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18"7891  integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==7892  dependencies:7893    is-plain-obj "^2.0.0"78947895source-map-resolve@^0.5.0:7896  version "0.5.3"7897  resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"7898  integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==7899  dependencies:7900    atob "^2.1.2"7901    decode-uri-component "^0.2.0"7902    resolve-url "^0.2.1"7903    source-map-url "^0.4.0"7904    urix "^0.1.0"79057906source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.6:7907  version "0.5.19"7908  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"7909  integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==7910  dependencies:7911    buffer-from "^1.0.0"7912    source-map "^0.6.0"79137914source-map-url@^0.4.0:7915  version "0.4.1"7916  resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"7917  integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==79187919source-map@^0.5.0, source-map@^0.5.6:7920  version "0.5.7"7921  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"7922  integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=79237924source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:7925  version "0.6.1"7926  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"7927  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==79287929source-map@^0.7.3:7930  version "0.7.3"7931  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"7932  integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==79337934spdx-correct@^3.0.0:7935  version "3.1.1"7936  resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"7937  integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==7938  dependencies:7939    spdx-expression-parse "^3.0.0"7940    spdx-license-ids "^3.0.0"79417942spdx-exceptions@^2.1.0:7943  version "2.3.0"7944  resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"7945  integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==79467947spdx-expression-parse@^3.0.0:7948  version "3.0.1"7949  resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"7950  integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==7951  dependencies:7952    spdx-exceptions "^2.1.0"7953    spdx-license-ids "^3.0.0"79547955spdx-license-ids@^3.0.0:7956  version "3.0.7"7957  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65"7958  integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==79597960speedometer@~1.0.0:7961  version "1.0.0"7962  resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-1.0.0.tgz#cd671cb06752c22bca3370e2f334440be4fc62e2"7963  integrity sha1-zWccsGdSwivKM3Di8zREC+T8YuI=79647965split-string@^3.0.1, split-string@^3.0.2:7966  version "3.1.0"7967  resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"7968  integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==7969  dependencies:7970    extend-shallow "^3.0.0"79717972sprintf-js@~1.0.2:7973  version "1.0.3"7974  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"7975  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=79767977sshpk@^1.7.0:7978  version "1.16.1"7979  resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"7980  integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==7981  dependencies:7982    asn1 "~0.2.3"7983    assert-plus "^1.0.0"7984    bcrypt-pbkdf "^1.0.0"7985    dashdash "^1.12.0"7986    ecc-jsbn "~0.1.1"7987    getpass "^0.1.1"7988    jsbn "~0.1.0"7989    safer-buffer "^2.0.2"7990    tweetnacl "~0.14.0"79917992stack-utils@^2.0.3:7993  version "2.0.3"7994  resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277"7995  integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==7996  dependencies:7997    escape-string-regexp "^2.0.0"79987999static-extend@^0.1.1:8000  version "0.1.2"8001  resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"8002  integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=8003  dependencies:8004    define-property "^0.2.5"8005    object-copy "^0.1.0"80068007stream-shift@^1.0.0:8008  version "1.0.1"8009  resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"8010  integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==80118012strict-uri-encode@^1.0.0:8013  version "1.1.0"8014  resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"8015  integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=80168017string-length@^4.0.1:8018  version "4.0.1"8019  resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1"8020  integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==8021  dependencies:8022    char-regex "^1.0.2"8023    strip-ansi "^6.0.0"80248025string-width@^1.0.1:8026  version "1.0.2"8027  resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"8028  integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=8029  dependencies:8030    code-point-at "^1.0.0"8031    is-fullwidth-code-point "^1.0.0"8032    strip-ansi "^3.0.0"80338034"string-width@^1.0.2 || 2":8035  version "2.1.1"8036  resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"8037  integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==8038  dependencies:8039    is-fullwidth-code-point "^2.0.0"8040    strip-ansi "^4.0.0"80418042string-width@^3.0.0, string-width@^3.1.0:8043  version "3.1.0"8044  resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"8045  integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==8046  dependencies:8047    emoji-regex "^7.0.1"8048    is-fullwidth-code-point "^2.0.0"8049    strip-ansi "^5.1.0"80508051string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0:8052  version "4.2.0"8053  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"8054  integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==8055  dependencies:8056    emoji-regex "^8.0.0"8057    is-fullwidth-code-point "^3.0.0"8058    strip-ansi "^6.0.0"80598060string.prototype.matchall@^4.0.5:8061  version "4.0.5"8062  resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da"8063  integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==8064  dependencies:8065    call-bind "^1.0.2"8066    define-properties "^1.1.3"8067    es-abstract "^1.18.2"8068    get-intrinsic "^1.1.1"8069    has-symbols "^1.0.2"8070    internal-slot "^1.0.3"8071    regexp.prototype.flags "^1.3.1"8072    side-channel "^1.0.4"80738074string.prototype.trimend@^1.0.3:8075  version "1.0.3"8076  resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b"8077  integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==8078  dependencies:8079    call-bind "^1.0.0"8080    define-properties "^1.1.3"80818082string.prototype.trimend@^1.0.4:8083  version "1.0.4"8084  resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"8085  integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==8086  dependencies:8087    call-bind "^1.0.2"8088    define-properties "^1.1.3"80898090string.prototype.trimstart@^1.0.3:8091  version "1.0.3"8092  resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa"8093  integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==8094  dependencies:8095    call-bind "^1.0.0"8096    define-properties "^1.1.3"80978098string.prototype.trimstart@^1.0.4:8099  version "1.0.4"8100  resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"8101  integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==8102  dependencies:8103    call-bind "^1.0.2"8104    define-properties "^1.1.3"81058106string_decoder@^1.1.1:8107  version "1.3.0"8108  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"8109  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==8110  dependencies:8111    safe-buffer "~5.2.0"81128113string_decoder@~1.1.1:8114  version "1.1.1"8115  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"8116  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==8117  dependencies:8118    safe-buffer "~5.1.0"81198120stringify-object@^3.2.1:8121  version "3.3.0"8122  resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"8123  integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==8124  dependencies:8125    get-own-enumerable-property-symbols "^3.0.0"8126    is-obj "^1.0.1"8127    is-regexp "^1.0.0"81288129strip-ansi@^3.0.0, strip-ansi@^3.0.1:8130  version "3.0.1"8131  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"8132  integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=8133  dependencies:8134    ansi-regex "^2.0.0"81358136strip-ansi@^4.0.0:8137  version "4.0.0"8138  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"8139  integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=8140  dependencies:8141    ansi-regex "^3.0.0"81428143strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:8144  version "5.2.0"8145  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"8146  integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==8147  dependencies:8148    ansi-regex "^4.1.0"81498150strip-ansi@^6.0.0:8151  version "6.0.0"8152  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"8153  integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==8154  dependencies:8155    ansi-regex "^5.0.0"81568157strip-bom@^3.0.0:8158  version "3.0.0"8159  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"8160  integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=81618162strip-bom@^4.0.0:8163  version "4.0.0"8164  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"8165  integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==81668167strip-final-newline@^2.0.0:8168  version "2.0.0"8169  resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"8170  integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==81718172strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:8173  version "3.1.1"8174  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"8175  integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==81768177strip-json-comments@~2.0.1:8178  version "2.0.1"8179  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"8180  integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=81818182strip-outer@^1.0.0:8183  version "1.0.1"8184  resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631"8185  integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==8186  dependencies:8187    escape-string-regexp "^1.0.2"81888189strip-url-auth@^1.0.0:8190  version "1.0.1"8191  resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae"8192  integrity sha1-IrD6OkE4WzO+PzMVUbu4N/oM164=81938194stylus-lookup@^3.0.1:8195  version "3.0.2"8196  resolved "https://registry.yarnpkg.com/stylus-lookup/-/stylus-lookup-3.0.2.tgz#c9eca3ff799691020f30b382260a67355fefdddd"8197  integrity sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg==8198  dependencies:8199    commander "^2.8.1"8200    debug "^4.1.0"82018202supports-color@7.2.0, supports-color@^7.0.0, supports-color@^7.1.0:8203  version "7.2.0"8204  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"8205  integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==8206  dependencies:8207    has-flag "^4.0.0"82088209supports-color@^5.3.0:8210  version "5.5.0"8211  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"8212  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==8213  dependencies:8214    has-flag "^3.0.0"82158216supports-color@^6.1.0:8217  version "6.1.0"8218  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"8219  integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==8220  dependencies:8221    has-flag "^3.0.0"82228223supports-color@^8.0.0:8224  version "8.1.1"8225  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"8226  integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==8227  dependencies:8228    has-flag "^4.0.0"82298230supports-hyperlinks@^2.0.0:8231  version "2.1.0"8232  resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47"8233  integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==8234  dependencies:8235    has-flag "^4.0.0"8236    supports-color "^7.0.0"82378238symbol-tree@^3.2.4:8239  version "3.2.4"8240  resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"8241  integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==82428243table@^6.0.9:8244  version "6.7.1"8245  resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2"8246  integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==8247  dependencies:8248    ajv "^8.0.1"8249    lodash.clonedeep "^4.5.0"8250    lodash.truncate "^4.4.2"8251    slice-ansi "^4.0.0"8252    string-width "^4.2.0"8253    strip-ansi "^6.0.0"82548255tapable@^2.2.0:8256  version "2.2.0"8257  resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b"8258  integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==82598260temp@~0.4.0:8261  version "0.4.0"8262  resolved "https://registry.yarnpkg.com/temp/-/temp-0.4.0.tgz#671ad63d57be0fe9d7294664b3fc400636678a60"8263  integrity sha1-ZxrWPVe+D+nXKUZks/xABjZnimA=82648265terminal-link@^2.0.0:8266  version "2.1.1"8267  resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"8268  integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==8269  dependencies:8270    ansi-escapes "^4.2.1"8271    supports-hyperlinks "^2.0.0"82728273test-exclude@^6.0.0:8274  version "6.0.0"8275  resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"8276  integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==8277  dependencies:8278    "@istanbuljs/schema" "^0.1.2"8279    glob "^7.1.4"8280    minimatch "^3.0.4"82818282text-table@^0.2.0:8283  version "0.2.0"8284  resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"8285  integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=82868287throat@^6.0.1:8288  version "6.0.1"8289  resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375"8290  integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==82918292through2@~2.0.3:8293  version "2.0.5"8294  resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"8295  integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==8296  dependencies:8297    readable-stream "~2.3.6"8298    xtend "~4.0.1"82998300through@^2.3.6:8301  version "2.3.8"8302  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"8303  integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=83048305tmp@^0.0.33:8306  version "0.0.33"8307  resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"8308  integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==8309  dependencies:8310    os-tmpdir "~1.0.2"83118312tmpl@1.0.x:8313  version "1.0.4"8314  resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"8315  integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=83168317to-fast-properties@^2.0.0:8318  version "2.0.0"8319  resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"8320  integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=83218322to-object-path@^0.3.0:8323  version "0.3.0"8324  resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"8325  integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=8326  dependencies:8327    kind-of "^3.0.2"83288329to-readable-stream@^1.0.0:8330  version "1.0.0"8331  resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"8332  integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==83338334to-regex-range@^2.1.0:8335  version "2.1.1"8336  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"8337  integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=8338  dependencies:8339    is-number "^3.0.0"8340    repeat-string "^1.6.1"83418342to-regex-range@^5.0.1:8343  version "5.0.1"8344  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"8345  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==8346  dependencies:8347    is-number "^7.0.0"83488349to-regex@^3.0.1, to-regex@^3.0.2:8350  version "3.0.2"8351  resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"8352  integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==8353  dependencies:8354    define-property "^2.0.2"8355    extend-shallow "^3.0.2"8356    regex-not "^1.0.2"8357    safe-regex "^1.1.0"83588359tough-cookie@^4.0.0:8360  version "4.0.0"8361  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"8362  integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==8363  dependencies:8364    psl "^1.1.33"8365    punycode "^2.1.1"8366    universalify "^0.1.2"83678368tough-cookie@~2.5.0:8369  version "2.5.0"8370  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"8371  integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==8372  dependencies:8373    psl "^1.1.28"8374    punycode "^2.1.1"83758376tr46@^2.0.2:8377  version "2.0.2"8378  resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479"8379  integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==8380  dependencies:8381    punycode "^2.1.1"83828383tr46@^2.1.0:8384  version "2.1.0"8385  resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240"8386  integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==8387  dependencies:8388    punycode "^2.1.1"83898390trim-repeated@^1.0.0:8391  version "1.0.0"8392  resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21"8393  integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE=8394  dependencies:8395    escape-string-regexp "^1.0.2"83968397ts-node@^9.0.0:8398  version "9.1.1"8399  resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d"8400  integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==8401  dependencies:8402    arg "^4.1.0"8403    create-require "^1.1.0"8404    diff "^4.0.1"8405    make-error "^1.1.1"8406    source-map-support "^0.5.17"8407    yn "3.1.1"84088409tsconfig-paths@^3.9.0:8410  version "3.9.0"8411  resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b"8412  integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==8413  dependencies:8414    "@types/json5" "^0.0.29"8415    json5 "^1.0.1"8416    minimist "^1.2.0"8417    strip-bom "^3.0.0"84188419tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0:8420  version "1.14.1"8421  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"8422  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==84238424tslint@^5.20.1:8425  version "5.20.1"8426  resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d"8427  integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==8428  dependencies:8429    "@babel/code-frame" "^7.0.0"8430    builtin-modules "^1.1.1"8431    chalk "^2.3.0"8432    commander "^2.12.1"8433    diff "^4.0.1"8434    glob "^7.1.1"8435    js-yaml "^3.13.1"8436    minimatch "^3.0.4"8437    mkdirp "^0.5.1"8438    resolve "^1.3.2"8439    semver "^5.3.0"8440    tslib "^1.8.0"8441    tsutils "^2.29.0"84428443tsutils@^2.29.0:8444  version "2.29.0"8445  resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"8446  integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==8447  dependencies:8448    tslib "^1.8.1"84498450tsutils@^3.17.1:8451  version "3.20.0"8452  resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.20.0.tgz#ea03ea45462e146b53d70ce0893de453ff24f698"8453  integrity sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==8454  dependencies:8455    tslib "^1.8.1"84568457tsutils@^3.21.0:8458  version "3.21.0"8459  resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"8460  integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==8461  dependencies:8462    tslib "^1.8.1"84638464tunnel-agent@^0.6.0:8465  version "0.6.0"8466  resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"8467  integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=8468  dependencies:8469    safe-buffer "^5.0.1"84708471tweetnacl@^0.14.3, tweetnacl@~0.14.0:8472  version "0.14.5"8473  resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"8474  integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=84758476tweetnacl@^1.0.3:8477  version "1.0.3"8478  resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596"8479  integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==84808481type-check@^0.4.0, type-check@~0.4.0:8482  version "0.4.0"8483  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"8484  integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==8485  dependencies:8486    prelude-ls "^1.2.1"84878488type-check@~0.3.2:8489  version "0.3.2"8490  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"8491  integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=8492  dependencies:8493    prelude-ls "~1.1.2"84948495type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5:8496  version "4.0.8"8497  resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"8498  integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==84998500type-fest@^0.11.0:8501  version "0.11.0"8502  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"8503  integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==85048505type-fest@^0.20.2:8506  version "0.20.2"8507  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"8508  integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==85098510type-fest@^0.6.0:8511  version "0.6.0"8512  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"8513  integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==85148515type@^1.0.1:8516  version "1.2.0"8517  resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"8518  integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==85198520type@^2.0.0:8521  version "2.1.0"8522  resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f"8523  integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==85248525typedarray-to-buffer@^3.1.5:8526  version "3.1.5"8527  resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"8528  integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==8529  dependencies:8530    is-typedarray "^1.0.0"85318532typescript@^3.9.5, typescript@^3.9.7:8533  version "3.9.9"8534  resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674"8535  integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==85368537typescript@^4.3.2:8538  version "4.3.2"8539  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805"8540  integrity sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==85418542uglify-js@^3.1.4:8543  version "3.12.7"8544  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.7.tgz#be4f06142a67bd91ef868b4e111dc241e151bff3"8545  integrity sha512-SIZhkoh+U/wjW+BHGhVwE9nt8tWJspncloBcFapkpGRwNPqcH8pzX36BXe3TPBjzHWPMUZotpCigak/udWNr1Q==85468547unbox-primitive@^1.0.1:8548  version "1.0.1"8549  resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"8550  integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==8551  dependencies:8552    function-bind "^1.1.1"8553    has-bigints "^1.0.1"8554    has-symbols "^1.0.2"8555    which-boxed-primitive "^1.0.2"85568557unicode-canonical-property-names-ecmascript@^1.0.4:8558  version "1.0.4"8559  resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"8560  integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==85618562unicode-match-property-ecmascript@^1.0.4:8563  version "1.0.4"8564  resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"8565  integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==8566  dependencies:8567    unicode-canonical-property-names-ecmascript "^1.0.4"8568    unicode-property-aliases-ecmascript "^1.0.4"85698570unicode-match-property-value-ecmascript@^1.2.0:8571  version "1.2.0"8572  resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531"8573  integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==85748575unicode-property-aliases-ecmascript@^1.0.4:8576  version "1.1.0"8577  resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"8578  integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==85798580union-value@^1.0.0:8581  version "1.0.1"8582  resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"8583  integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==8584  dependencies:8585    arr-union "^3.1.0"8586    get-value "^2.0.6"8587    is-extendable "^0.1.1"8588    set-value "^2.0.1"85898590uniq@^1.0.1:8591  version "1.0.1"8592  resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"8593  integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=85948595unique-string@^2.0.0:8596  version "2.0.0"8597  resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"8598  integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==8599  dependencies:8600    crypto-random-string "^2.0.0"86018602universal-user-agent@^6.0.0:8603  version "6.0.0"8604  resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee"8605  integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==86068607universalify@^0.1.0, universalify@^0.1.2:8608  version "0.1.2"8609  resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"8610  integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==86118612universalify@^2.0.0:8613  version "2.0.0"8614  resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"8615  integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==86168617unset-value@^1.0.0:8618  version "1.0.0"8619  resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"8620  integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=8621  dependencies:8622    has-value "^0.3.1"8623    isobject "^3.0.0"86248625upath@^1.1.1:8626  version "1.2.0"8627  resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"8628  integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==86298630update-notifier@^5.0.0:8631  version "5.1.0"8632  resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9"8633  integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==8634  dependencies:8635    boxen "^5.0.0"8636    chalk "^4.1.0"8637    configstore "^5.0.1"8638    has-yarn "^2.1.0"8639    import-lazy "^2.1.0"8640    is-ci "^2.0.0"8641    is-installed-globally "^0.4.0"8642    is-npm "^5.0.0"8643    is-yarn-global "^0.3.0"8644    latest-version "^5.1.0"8645    pupa "^2.1.1"8646    semver "^7.3.4"8647    semver-diff "^3.1.1"8648    xdg-basedir "^4.0.0"86498650uri-js@^4.2.2:8651  version "4.4.1"8652  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"8653  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==8654  dependencies:8655    punycode "^2.1.0"86568657urix@^0.1.0:8658  version "0.1.0"8659  resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"8660  integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=86618662url-parse-lax@^3.0.0:8663  version "3.0.0"8664  resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"8665  integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=8666  dependencies:8667    prepend-http "^2.0.0"86688669use@^3.1.0:8670  version "3.1.1"8671  resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"8672  integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==86738674utf-8-validate@^5.0.2:8675  version "5.0.4"8676  resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.4.tgz#72a1735983ddf7a05a43a9c6b67c5ce1c910f9b8"8677  integrity sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q==8678  dependencies:8679    node-gyp-build "^4.2.0"86808681util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:8682  version "1.0.2"8683  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"8684  integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=86858686util-extend@^1.0.1:8687  version "1.0.3"8688  resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f"8689  integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=86908691uuid@^3.3.2:8692  version "3.4.0"8693  resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"8694  integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==86958696v8-compile-cache@^2.0.3:8697  version "2.2.0"8698  resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132"8699  integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==87008701v8-to-istanbul@^7.0.0:8702  version "7.1.0"8703  resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07"8704  integrity sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==8705  dependencies:8706    "@types/istanbul-lib-coverage" "^2.0.1"8707    convert-source-map "^1.6.0"8708    source-map "^0.7.3"87098710validate-npm-package-license@^3.0.1:8711  version "3.0.4"8712  resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"8713  integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==8714  dependencies:8715    spdx-correct "^3.0.0"8716    spdx-expression-parse "^3.0.0"87178718verror@1.10.0:8719  version "1.10.0"8720  resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"8721  integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=8722  dependencies:8723    assert-plus "^1.0.0"8724    core-util-is "1.0.2"8725    extsprintf "^1.2.0"87268727vue-template-es2015-compiler@^1.9.0:8728  version "1.9.1"8729  resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"8730  integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==87318732w3c-hr-time@^1.0.2:8733  version "1.0.2"8734  resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"8735  integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==8736  dependencies:8737    browser-process-hrtime "^1.0.0"87388739w3c-xmlserializer@^2.0.0:8740  version "2.0.0"8741  resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"8742  integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==8743  dependencies:8744    xml-name-validator "^3.0.0"87458746walkdir@^0.4.1:8747  version "0.4.1"8748  resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.4.1.tgz#dc119f83f4421df52e3061e514228a2db20afa39"8749  integrity sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==87508751walker@^1.0.7:8752  version "1.0.7"8753  resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"8754  integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=8755  dependencies:8756    makeerror "1.0.x"87578758wcwidth@^1.0.1:8759  version "1.0.1"8760  resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"8761  integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=8762  dependencies:8763    defaults "^1.0.3"87648765webidl-conversions@^5.0.0:8766  version "5.0.0"8767  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"8768  integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==87698770webidl-conversions@^6.1.0:8771  version "6.1.0"8772  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"8773  integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==87748775websocket@^1.0.34:8776  version "1.0.34"8777  resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111"8778  integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==8779  dependencies:8780    bufferutil "^4.0.1"8781    debug "^2.2.0"8782    es5-ext "^0.10.50"8783    typedarray-to-buffer "^3.1.5"8784    utf-8-validate "^5.0.2"8785    yaeti "^0.0.6"87868787whatwg-encoding@^1.0.5:8788  version "1.0.5"8789  resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"8790  integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==8791  dependencies:8792    iconv-lite "0.4.24"87938794whatwg-mimetype@^2.3.0:8795  version "2.3.0"8796  resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"8797  integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==87988799whatwg-url@^8.0.0:8800  version "8.4.0"8801  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837"8802  integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==8803  dependencies:8804    lodash.sortby "^4.7.0"8805    tr46 "^2.0.2"8806    webidl-conversions "^6.1.0"88078808whatwg-url@^8.5.0:8809  version "8.6.0"8810  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.6.0.tgz#27c0205a4902084b872aecb97cf0f2a7a3011f4c"8811  integrity sha512-os0KkeeqUOl7ccdDT1qqUcS4KH4tcBTSKK5Nl5WKb2lyxInIZ/CpjkqKa1Ss12mjfdcRX9mHmPPs7/SxG1Hbdw==8812  dependencies:8813    lodash "^4.7.0"8814    tr46 "^2.1.0"8815    webidl-conversions "^6.1.0"88168817which-boxed-primitive@^1.0.2:8818  version "1.0.2"8819  resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"8820  integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==8821  dependencies:8822    is-bigint "^1.0.1"8823    is-boolean-object "^1.1.0"8824    is-number-object "^1.0.4"8825    is-string "^1.0.5"8826    is-symbol "^1.0.3"88278828which-module@^2.0.0:8829  version "2.0.0"8830  resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"8831  integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=88328833which@2.0.2, which@^2.0.1:8834  version "2.0.2"8835  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"8836  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==8837  dependencies:8838    isexe "^2.0.0"88398840wide-align@1.1.3, wide-align@^1.1.0:8841  version "1.1.3"8842  resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"8843  integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==8844  dependencies:8845    string-width "^1.0.2 || 2"88468847widest-line@^3.1.0:8848  version "3.1.0"8849  resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"8850  integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==8851  dependencies:8852    string-width "^4.0.0"88538854word-wrap@^1.2.3, word-wrap@~1.2.3:8855  version "1.2.3"8856  resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"8857  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==88588859wordwrap@^1.0.0:8860  version "1.0.0"8861  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"8862  integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=88638864workerpool@6.0.2:8865  version "6.0.2"8866  resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.2.tgz#e241b43d8d033f1beb52c7851069456039d1d438"8867  integrity sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==88688869wrap-ansi@^5.1.0:8870  version "5.1.0"8871  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"8872  integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==8873  dependencies:8874    ansi-styles "^3.2.0"8875    string-width "^3.0.0"8876    strip-ansi "^5.0.0"88778878wrap-ansi@^7.0.0:8879  version "7.0.0"8880  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"8881  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==8882  dependencies:8883    ansi-styles "^4.0.0"8884    string-width "^4.1.0"8885    strip-ansi "^6.0.0"88868887wrappy@1:8888  version "1.0.2"8889  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"8890  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=88918892write-file-atomic@^3.0.0:8893  version "3.0.3"8894  resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"8895  integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==8896  dependencies:8897    imurmurhash "^0.1.4"8898    is-typedarray "^1.0.0"8899    signal-exit "^3.0.2"8900    typedarray-to-buffer "^3.1.5"89018902write-json-file@^4.2.0:8903  version "4.3.0"8904  resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-4.3.0.tgz#908493d6fd23225344af324016e4ca8f702dd12d"8905  integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==8906  dependencies:8907    detect-indent "^6.0.0"8908    graceful-fs "^4.1.15"8909    is-plain-obj "^2.0.0"8910    make-dir "^3.0.0"8911    sort-keys "^4.0.0"8912    write-file-atomic "^3.0.0"89138914ws@^7.4.5:8915  version "7.4.6"8916  resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c"8917  integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==89188919xdg-basedir@^4.0.0:8920  version "4.0.0"8921  resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"8922  integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==89238924xml-name-validator@^3.0.0:8925  version "3.0.0"8926  resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"8927  integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==89288929xmlchars@^2.2.0:8930  version "2.2.0"8931  resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"8932  integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==89338934xtend@~4.0.1:8935  version "4.0.2"8936  resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"8937  integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==89388939xxhashjs@^0.2.2:8940  version "0.2.2"8941  resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8"8942  integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==8943  dependencies:8944    cuint "^0.2.2"89458946y18n@^4.0.0:8947  version "4.0.1"8948  resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"8949  integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==89508951y18n@^5.0.5:8952  version "5.0.5"8953  resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18"8954  integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==89558956yaeti@^0.0.6:8957  version "0.0.6"8958  resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577"8959  integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=89608961yallist@^2.1.2:8962  version "2.1.2"8963  resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"8964  integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=89658966yallist@^4.0.0:8967  version "4.0.0"8968  resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"8969  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==89708971yargs-parser@13.1.2, yargs-parser@^13.1.2:8972  version "13.1.2"8973  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"8974  integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==8975  dependencies:8976    camelcase "^5.0.0"8977    decamelize "^1.2.0"89788979yargs-parser@^20.2.2:8980  version "20.2.4"8981  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"8982  integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==89838984yargs-unparser@2.0.0:8985  version "2.0.0"8986  resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"8987  integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==8988  dependencies:8989    camelcase "^6.0.0"8990    decamelize "^4.0.0"8991    flat "^5.0.2"8992    is-plain-obj "^2.1.0"89938994yargs@13.3.2:8995  version "13.3.2"8996  resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"8997  integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==8998  dependencies:8999    cliui "^5.0.0"9000    find-up "^3.0.0"9001    get-caller-file "^2.0.1"9002    require-directory "^2.1.1"9003    require-main-filename "^2.0.0"9004    set-blocking "^2.0.0"9005    string-width "^3.0.0"9006    which-module "^2.0.0"9007    y18n "^4.0.0"9008    yargs-parser "^13.1.2"90099010yargs@^16.0.3:9011  version "16.2.0"9012  resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"9013  integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==9014  dependencies:9015    cliui "^7.0.2"9016    escalade "^3.1.1"9017    get-caller-file "^2.0.5"9018    require-directory "^2.1.1"9019    string-width "^4.2.0"9020    y18n "^5.0.5"9021    yargs-parser "^20.2.2"90229023yargs@^17.0.0, yargs@^17.0.1:9024  version "17.0.1"9025  resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.0.1.tgz#6a1ced4ed5ee0b388010ba9fd67af83b9362e0bb"9026  integrity sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==9027  dependencies:9028    cliui "^7.0.2"9029    escalade "^3.1.1"9030    get-caller-file "^2.0.5"9031    require-directory "^2.1.1"9032    string-width "^4.2.0"9033    y18n "^5.0.5"9034    yargs-parser "^20.2.2"90359036yn@3.1.1:9037  version "3.1.1"9038  resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"9039  integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==90409041yocto-queue@^0.1.0:9042  version "0.1.0"9043  resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"9044  integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==