diff --git a/.eslintrc b/.eslintrc
index f76aa747d..f827c32e0 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -26,8 +26,7 @@
"quotes": ["error", "single"]
},
"ignorePatterns": [
- "contracts/**/scripts/resources",
- "scripts/**/resources",
+ "lib",
"cdk.out",
"*.js"
]
diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml
index d547296c4..5805d6067 100644
--- a/.github/workflows/pull_request.yml
+++ b/.github/workflows/pull_request.yml
@@ -29,12 +29,6 @@ jobs:
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
- - name: Install mdBook plugins
- uses: actions-rs/cargo@v1
- with:
- command: install
- args: mdbook-katex mdbook-mermaid
-
- name: Install and build all package dependencies
run: npm ci
env:
diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml
index d79bcfa18..faa13dffd 100644
--- a/.github/workflows/push.yml
+++ b/.github/workflows/push.yml
@@ -36,12 +36,6 @@ jobs:
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
-
- - name: Install mdBook plugins
- uses: actions-rs/cargo@v1
- with:
- command: install
- args: mdbook-katex mdbook-mermaid
- name: Install and build all package dependencies
run: npm ci
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 63e2f8ca4..dfb16ed2d 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -33,12 +33,6 @@ jobs:
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
- - name: Install mdBook plugins
- uses: actions-rs/cargo@v1
- with:
- command: install
- args: mdbook-katex mdbook-mermaid
-
- name: Install and build all package dependencies
run: npm ci
env:
diff --git a/.github/workflows/sandbox.yml b/.github/workflows/sandbox.yml
index e2dc03737..74973904f 100644
--- a/.github/workflows/sandbox.yml
+++ b/.github/workflows/sandbox.yml
@@ -40,12 +40,6 @@ jobs:
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
- - name: Install mdBook plugins
- uses: actions-rs/cargo@v1
- with:
- command: install
- args: mdbook-katex mdbook-mermaid
-
- name: Install and build all package dependencies
run: npm ci
env:
diff --git a/.gitmodules b/.gitmodules
index 0c911cbe2..05d28266f 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,10 +1,11 @@
-[submodule "contracts/ethereum/scripts/resources/ssv-network"]
- path = contracts/ethereum/scripts/resources/ssv-network
- url = https://github.com/bloxapp/ssv-network.git
- branch = jato-v2
[submodule "contracts/ethereum/lib/forge-std"]
path = contracts/ethereum/lib/forge-std
url = https://github.com/foundry-rs/forge-std
-[submodule "services/oracle/scripts/resources/rockx-dkg-cli"]
- path = services/oracle/scripts/resources/rockx-dkg-cli
- url = https://github.com/consensusnetworks/rockx-dkg-cli.git
+[submodule "contracts/ethereum/lib/ssv-network"]
+ path = contracts/ethereum/lib/ssv-network
+ url = https://github.com/bloxapp/ssv-network.git
+ branch = jato-v2
+[submodule "services/oracle/lib/dkg"]
+ path = services/oracle/lib/dkg
+ url = https://github.com/consensusnetworks/ssv-dkg.git
+ branch = feature/operator-env
diff --git a/.vscode/settings.json b/.vscode/settings.json
index c8da11d36..960b64ffb 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -19,6 +19,5 @@
"typescript"
],
"css.lint.unknownAtRules": "ignore",
- "jupyter.notebookFileRoot": "${fileDirname}",
"volar.inlayHints.eventArgumentInInlineHandlers": false
}
\ No newline at end of file
diff --git a/README.md b/README.md
index 5db9bc1d1..de2e30b4c 100644
--- a/README.md
+++ b/README.md
@@ -121,8 +121,7 @@ echo "USE_SECRETS=false" > .env
| `ETHEREUM_RPC_URL` | Ethereum RPC network URL | `http://127.0.0.1:8545` |
| `NETWORK` | Network name (`mainnet || testnet || hardhat || localhost`) | `localhost` |
| `FORK` | Fork network name (`mainnet || testnet || hardhat`) | `testnet` |
-| `MANAGER_ADDRESS` | Manager contract address | (predicted manager address) |
-| `VIEWS_ADDRESS` | Views contract address | (predicted views address) |
+| `FACTORY_ADDRESS` | Base factory contract address | (predicted factory address) |
| `CRYPTO_COMPARE_API_KEY` | CryptoCompare API key | `` |
| `TUNNEL` | Whether to tunnel local network RPC URLs (for remote wallets) | `false` |
| `MOCK_SERVICES` | Whether to mock backend services | `true` |
diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore
new file mode 100644
index 000000000..0c100c4f4
--- /dev/null
+++ b/apps/docs/.gitignore
@@ -0,0 +1,2 @@
+cache
+dist
\ No newline at end of file
diff --git a/apps/docs/.vitepress/config.mts b/apps/docs/.vitepress/config.mts
new file mode 100644
index 000000000..58f968e5f
--- /dev/null
+++ b/apps/docs/.vitepress/config.mts
@@ -0,0 +1,61 @@
+import { withMermaid } from 'vitepress-plugin-mermaid'
+
+// https://vitepress.dev/reference/site-config
+export default withMermaid({
+ title: "Casimir Docs",
+ head: [['link', { rel: 'icon', href: '/favicon.ico' }]],
+ rewrites: {
+ 'index.md': 'introduction/what-is-casimir.md',
+ },
+ cleanUrls: true,
+ markdown: {
+ math: true
+ },
+ srcDir: 'src',
+ outDir: './dist',
+ themeConfig: {
+ // https://vitepress.dev/reference/default-theme-config
+ logo: '/casimir.svg',
+ search: {
+ provider: 'local'
+ },
+ sidebar: [
+ {
+ text: 'Introduction',
+ base: '/introduction',
+ items: [
+ { text: 'What is Casimir?', link: '/what-is-casimir' },
+ { text: 'Architecture', link: '/architecture' }
+ ]
+ },
+ {
+ text: 'Guide',
+ base: '/guide',
+ items: [
+ { text: 'Accounts', link: '/accounts' },
+ { text: 'Staking', link: '/staking' },
+ { text: 'Operating', link: '/operating' }
+ ]
+ },
+ {
+ text: 'Reference',
+ base: '/reference',
+ items: [
+ { text: 'Contract Addresses', link: '/contract-addresses' },
+ { text: 'Solidity API', link: '/solidity-api' }
+ ]
+ },
+ {
+ text: 'Troubleshooting',
+ base: '/troubleshooting',
+ items: [
+ { text: 'Operator Issues', link: '/operator-issues' },
+ { text: 'Wallet Issues', link: '/wallet-issues' }
+ ]
+ }
+ ],
+ socialLinks: [
+ { icon: 'github', link: 'https://github.com/consensusnetworks/casimir' }
+ ]
+ }
+})
diff --git a/apps/docs/README.md b/apps/docs/README.md
new file mode 100644
index 000000000..c0f363bb9
--- /dev/null
+++ b/apps/docs/README.md
@@ -0,0 +1 @@
+# @casimir/docs
diff --git a/apps/docs/package.json b/apps/docs/package.json
new file mode 100644
index 000000000..59089cdf6
--- /dev/null
+++ b/apps/docs/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "@casimir/docs",
+ "private": "true",
+ "scripts": {
+ "dev": "npx vitepress dev",
+ "docgen": "npx esno -r dotenv/config ./scripts/docgen.ts",
+ "build": "npx vitepress build",
+ "preview": "npx vitepress preview",
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "devDependencies": {
+ "@types/node": "^17.0.38",
+ "dotenv": "^16.3.1",
+ "esno": "0.17.0",
+ "markdown-it-mathjax3": "^4.3.2",
+ "mermaid": "^10.5.1",
+ "vitepress": "^1.0.0-rc.23",
+ "vitepress-plugin-mermaid": "^2.0.15"
+ }
+}
diff --git a/apps/docs/scripts/docgen.ts b/apps/docs/scripts/docgen.ts
new file mode 100644
index 000000000..886b96b5a
--- /dev/null
+++ b/apps/docs/scripts/docgen.ts
@@ -0,0 +1,7 @@
+import { run } from '@casimir/shell'
+
+void async function () {
+ const outputDir = `${process.cwd()}/src/reference`
+ const templateDir = `${process.cwd()}/templates/solidity`
+ await run(`DOCS_OUTPUT_DIR=${outputDir} DOCS_TEMPLATE_DIR=${templateDir} npm run docgen --workspace @casimir/ethereum`)
+}()
\ No newline at end of file
diff --git a/apps/docs/src/guide/accounts.md b/apps/docs/src/guide/accounts.md
new file mode 100644
index 000000000..b2cfda29a
--- /dev/null
+++ b/apps/docs/src/guide/accounts.md
@@ -0,0 +1,5 @@
+::: warning
+🚧 This page is incomplete.
+:::
+
+# Accounts
\ No newline at end of file
diff --git a/apps/docs/src/guide/operating.md b/apps/docs/src/guide/operating.md
new file mode 100644
index 000000000..eb082a36a
--- /dev/null
+++ b/apps/docs/src/guide/operating.md
@@ -0,0 +1,7 @@
+::: warning
+🚧 This page is incomplete.
+:::
+
+# Operating
+
+Operators owners will need to [set up an SSV node with RockX](https://github.com/consensusnetworks/ssv-dkg) and register with Casimir. The operators page in the Casimir app guides an owner through the process and provides an easy interface for registration and operator management.
\ No newline at end of file
diff --git a/apps/docs/src/guide/staking.md b/apps/docs/src/guide/staking.md
new file mode 100644
index 000000000..d1a3c7fdd
--- /dev/null
+++ b/apps/docs/src/guide/staking.md
@@ -0,0 +1,7 @@
+::: warning
+🚧 This page is incomplete.
+:::
+
+# Staking
+
+Users can deposit any amount of ETH to the manager contract. Their deposits are staked to validators run by SSV operators (see [Operators](#operators)). Rewards are auto-compounded into stake and users can withdraw their principal plus any earned proportion of new stake (or a partial amount of their choice) at any time.
\ No newline at end of file
diff --git a/apps/docs/src/index.md b/apps/docs/src/index.md
new file mode 100644
index 000000000..57a08a27b
--- /dev/null
+++ b/apps/docs/src/index.md
@@ -0,0 +1,17 @@
+::: warning
+🚧 This page is incomplete.
+:::
+
+# What is Casimir?
+
+Casimir is a platform... TODO
+
+## Casimir Ethereum Staking
+
+Currlently stakers either need to solo-stake (and have least 32 Ether), or they need to pool their assets in a liquid staking protocol (LSD). While the former choice is a reliably secure choice for Ether holders (if they have solid infrastructure), the latter, LSDs, often present an inherent counterparty risk to the user because of their centralized control of staking node operators (see [The Risks of LSD](https://notes.ethereum.org/@djrtwo/risks-of-lsd)).
+
+Casimir is designed to offer users the experience and security of solo-staking while pooling their assets. The Casimir contracts seamlessly connect stakers with any amount of Ether to a permissionless registry of high-performing node operators. Casimir aims to minimize counterparty risk for users and improve decentralization in Ethereum staking:
+
+- Validators duties are performed by registered (collateralized) operators running distributed validator technology (DVT)
+- Keys are created and reshared using distributed key generation (DKG)
+- Balance and status reports are reported by a decentralized oracle network (DON)
\ No newline at end of file
diff --git a/apps/docs/src/introduction/architecture.md b/apps/docs/src/introduction/architecture.md
new file mode 100644
index 000000000..255888fff
--- /dev/null
+++ b/apps/docs/src/introduction/architecture.md
@@ -0,0 +1,176 @@
+::: warning
+🚧 This page is incomplete.
+:::
+
+# Architecture
+
+Casimir distributes user deposits to Ethereum validators operated by SSV. Validator keys are shared with zero-coordination distributed key generation. Chainlink nodes report from the Beacon chain and SSV to sync balances and rewards, manage collateral recovery, and automate validator creation and exits.
+
+```mermaid
+graph LR
+
+ subgraph Contracts
+ B(Manager Contract)
+ C(Beacon Deposit Contract)
+ D(SSV Contract)
+ H(Functions Contract)
+ I(Automation Contract)
+ end
+
+ subgraph Oracle Dao
+ G(Oracle)
+ end
+ G --> B
+
+ A((User)) --> B
+
+ B --> C
+ B --> D
+
+ C --> E1(Ethereum Validator 1)
+ C --> E2(Ethereum Validator 2)
+
+ subgraph Validator 1
+ E1 --> F11(SSV Operator 1)
+ E1 --> F12(SSV Operator 2)
+ E1 --> F13(SSV Operator 3)
+ E1 --> F14(SSV Operator 4)
+ end
+
+ subgraph Validator 2
+ E2 --> F21(SSV Operator 5)
+ E2 --> F22(SSV Operator 6)
+ E2 --> F23(SSV Operator 7)
+ E2 --> F24(SSV Operator n)
+ end
+
+ I --> B
+ H <--> I
+
+ subgraph Chainlink
+ J1(Chainlink Node 1)
+ J2(Chainlink Node 2)
+ J3(Chainlink Node 3)
+ J4(Chainlink Node n)
+ end
+
+ J1 --> H
+ J2 --> H
+ J3 --> H
+ J4 --> H
+
+ J1 --> I
+ J2 --> I
+ J3 --> I
+ J4 --> I
+```
+
+## Distributed Key Generation
+
+Casimir distributes validator key shares to operators using SSV nodes with [RockX DKG support](https://github.com/RockX-SG/rockx-dkg-cli). The [@casimir/oracle service](https://github.com/consensusnetworks/casimir/blob/master/services/oracle) uses a DKG messenger server to interact with SSV nodes and perform DKG operations. Before running tests, the [@casimir/oracle generate script](https://github.com/consensusnetworks/casimir/blob/master/services/oracle/scripts/generate.ts) is used to pregenerate DKG keys and the [oracle helper scripts](https://github.com/consensusnetworks/casimir/blob/master/contracts/ethereum/helpers/oracle) completes tests with the pregenerated DKG keys. While running the development environment, a local instance of the @casimir/oracle service is used.
+
+## Oracles
+
+The contract uses two oracles to automate the Casimir staking experience and ensure the security of user funds. The automated upkeep contract reports total validator balance, swept balance, and validator actions once per day using [Chainlink Functions](https://docs.chain.link/chainlink-functions) and [Chainlink Automation](https://docs.chain.link/chainlink-automation/introduction). The [@chainlink/functions service](https://github.com/consensusnetworks/casimir/blob/master/services/functions) is used for two request types per report period, balances and details, to overcome the current Chainlink DON constraints. The [Casimir DAO oracle](https://github.com/consensusnetworks/casimir/blob/master/services/oracle) watches the manager contract events and automatically executes zero-coordination distributed key generation (DKG) operations: validator creation, validator resharing, and validator exiting. The DAO oracle also submits verifiable report details in response to reported validator details (such as one or more new exited validators).
+
+## Users
+
+Users can deposit any amount of ETH to the manager contract. Their deposits are staked to validators run by SSV operators (see [Operators](#operators)). Rewards are auto-compounded into stake and users can withdraw their principal plus any earned proportion of new stake (or a partial amount of their choice) at any time.
+
+### User Fees
+
+The contract charges a user fee on deposits and rewards to cover operational expenses.
+
+**Fee Distribution Calculation:**
+
+Let:
+
+- $F_t$ be the total fee percentage, which is a sum of the required ETH, LINK, and SSV fees.
+- $D$ be the amount of ETH deposited by the user.
+- $E$ be the amount of ETH to be allocated for the contract's operations.
+- $F_a$ be the ETH amount to be swapped for LINK and SSV to facilitate the contract's functions.
+
+Given the 5% fee, the ETH to be allocated for the contract's operations is calculated as:
+$E = D \times \frac{100}{100 + F_t}$
+
+The amount to be converted to LINK and SSV is:
+$F_a = D - E$
+
+Where:
+
+- $F_t$ typically equals 5%.
+- $D$ is the amount of ETH the user wants to deposit.
+- $E$ represents the actual ETH amount that will be added to the contract after deducting the fee.
+- $F_a$ is the remaining ETH that will be used to acquire LINK and SSV.
+
+### User Stake
+
+The manager contract adjusts a user's stake based on the change in the total reward-to-stake ratio sum since their last interaction with the contract. Each time new rewards are reported, the ratio sum is updated to include the new rewards-to-stake ratio. The ratio sum is used to calculate a user's current stake, including compounded rewards, at any time.
+
+**Current Stake Calculation:**
+
+Let:
+
+- $S$ be the calculated current stake of the user, including compounded rewards.
+- $S_0$ be the initial stake of the user at the time of their last deposit or stake update.
+- $R_s$ be the current cumulative sum of reward-to-stake ratios in the contract.
+- $R_{s0}$ be the cumulative sum of reward-to-stake ratios at the time the user made their last deposit or update to their stake.
+
+The user's current compounded stake at any time is calculated as:
+$S = S_0 \times \frac{R_s}{R_{s0}}$
+
+Where:
+
+- $S$ corresponds to **`users[userAddress].stake`** in the contract.
+- $S_0$ also corresponds to **`users[userAddress].stake`** in the contract, but it's accessed before settling the user's current stake.
+- $R_s$ is represented by **`stakeRatioSum`** in the contract.
+- $R_{s0}$ is represented by **`users[userAddress].stakeRatioSum0`** in the contract.
+
+### User Withdrawals
+
+Users can request a withdrawal of any amount of their stake at any time. If the requested amount is available in the buffered balance (prepooled balance plus withdrawn balance), the withdrawal is fulfilled immediately. Otherwise, the withdrawal is added to the pending withdrawals queue and fulfilled when the requested amount is available (usually within 1-4 days, depending on the amount).
+
+## Operators
+
+Each Casimir validator is run by four selected operators holding the key shares to perform duties with threshold signatures on SSV. Registration is open to any SSV operator (see [Operator Registration](#operator-registration). Operators are selected by an algorithm that ensures high-performance but emphasizes decentralization (see [Operator Selection](#operator-selection)) as user's deposit stake and new validators are required.
+
+### Operator Registration
+
+Operators can join the contract registry with a deposit of 4 ETH for collateral (see [Operator Collateral](#operator-collateral)) and a lightweight SSV node config add-on (see [Operator Onboarding](#operator-onboarding)).
+
+### Operator Selection
+
+Operators are chosen to run validators based on metrics fetched and derived directly from the SSV network. These metrics are mainly unused collateral (1 ETH per operator per validator), SSV performance, Casimir pool count, and requested fees.
+
+If an operator owner would like to deregister their operator and free up their collateral, they can request a reshare via the Casimir registry. Casimir removes the operator from existing operator groups by resharing or exiting. The latter is only required in the case that a validator has already undergone more than two reshares to avoid leaving the full key recoverable outside of the currently selected operators.
+
+### Operator Collateral
+
+Collateral is used to recover lost validator effective balance at the time of completing an exit. An operator must have at least 1 ETH of available collateral (1 ETH collateral becomes unavailable per each validator that an operator joins) to be selected for a new pool validator. When an operator is removed from a pool, either when resharing or after a completed exit, they are held responsible for up to 1 ETH of the validator's effective balance if any is lost below the 32 ETH minimum. The potential nonzero amount an operator owes in this case is called the blame amount.
+
+**Blame Amount Calculation:**
+
+Let:
+
+- $E$ be the total ETH lost, where $0 \leq E \leq 4$.
+- $P_i$ be the performance percentage of the $i^{th}$ operator, where $0 \leq P_i \leq 100$ for $i = 1, 2, 3, 4$.
+- $B_i$ be the blame amount for the $i^{th}$ operator.
+
+If all operators have equal performance, the blame is evenly distributed:
+$B_i = \frac{E}{4} \quad \text{for all } i$
+
+Otherwise, the blame is distributed inversely proportional to performance:
+First, calculate the inverse of each performance:
+$I_i = 100 - P_i$
+
+Then, the sum of all inverses:
+$S = \sum_{i=1}^{4} I_i$
+
+Now, the blame for each operator is:
+$B_i = \left( \frac{I_i}{S} \right) \times E$
+
+The blame amounts are submitted by the DAO oracle in response to a completed validator reshare or exit.
+
+### Operator Onboarding
+
+Operators owners will need to [set up an SSV node with RockX](https://github.com/consensusnetworks/ssv-dkg) and register with Casimir. The operators page in the Casimir app guides an owner through the process and provides an easy interface for registration and operator management.
\ No newline at end of file
diff --git a/apps/docs/src/public/casimir.svg b/apps/docs/src/public/casimir.svg
new file mode 100644
index 000000000..19b5fcc26
--- /dev/null
+++ b/apps/docs/src/public/casimir.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/apps/docs/src/public/favicon.ico b/apps/docs/src/public/favicon.ico
new file mode 100644
index 000000000..4633ba207
Binary files /dev/null and b/apps/docs/src/public/favicon.ico differ
diff --git a/apps/docs/src/reference/.gitignore b/apps/docs/src/reference/.gitignore
new file mode 100644
index 000000000..2c0bb4406
--- /dev/null
+++ b/apps/docs/src/reference/.gitignore
@@ -0,0 +1,2 @@
+# Auto-generated API documentation
+solidity-api.md
\ No newline at end of file
diff --git a/apps/docs/src/reference/contract-addresses.md b/apps/docs/src/reference/contract-addresses.md
new file mode 100644
index 000000000..a0d25a05d
--- /dev/null
+++ b/apps/docs/src/reference/contract-addresses.md
@@ -0,0 +1,5 @@
+::: warning
+🚧 This page is incomplete.
+:::
+
+# Contract Addresses
\ No newline at end of file
diff --git a/apps/docs/src/troubleshooting/operator-issues.md b/apps/docs/src/troubleshooting/operator-issues.md
new file mode 100644
index 000000000..55096e896
--- /dev/null
+++ b/apps/docs/src/troubleshooting/operator-issues.md
@@ -0,0 +1,5 @@
+::: warning
+🚧 This page is incomplete.
+:::
+
+# Operator Issues
\ No newline at end of file
diff --git a/apps/docs/src/troubleshooting/wallet-issues.md b/apps/docs/src/troubleshooting/wallet-issues.md
new file mode 100644
index 000000000..2f2afdc7d
--- /dev/null
+++ b/apps/docs/src/troubleshooting/wallet-issues.md
@@ -0,0 +1,5 @@
+::: warning
+🚧 This page is incomplete.
+:::
+
+# Wallet Issues
\ No newline at end of file
diff --git a/apps/docs/templates/solidity/common.hbs b/apps/docs/templates/solidity/common.hbs
new file mode 100644
index 000000000..2a0c87297
--- /dev/null
+++ b/apps/docs/templates/solidity/common.hbs
@@ -0,0 +1,35 @@
+{{h}} {{name}}
+
+{{natspec.title}}
+
+{{#if signature}}
+```solidity
+{{{signature}}}
+```
+{{/if}}
+
+{{{natspec.notice}}}
+
+{{#if natspec.dev}}
+_{{{natspec.dev}}}_
+{{/if}}
+
+{{#if natspec.params}}
+{{h 2}} Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+{{#each params}}
+| {{name}} | {{type}} | {{{joinLines natspec}}} |
+{{/each}}
+{{/if}}
+
+{{#if natspec.returns}}
+{{h 2}} Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+{{#each returns}}
+| {{#if name}}{{name}}{{else}}[{{@index}}]{{/if}} | {{type}} | {{{joinLines natspec}}} |
+{{/each}}
+{{/if}}
diff --git a/apps/landing/package.json b/apps/landing/package.json
index 038f462a3..f97b18c0e 100644
--- a/apps/landing/package.json
+++ b/apps/landing/package.json
@@ -2,7 +2,6 @@
"name": "@casimir/landing",
"description": "Casimir landing page",
"private": true,
- "version": "0.0.1",
"scripts": {
"dev": "vite",
"build": "vite build",
diff --git a/apps/landing/public/favicon.ico b/apps/landing/public/favicon.ico
new file mode 100644
index 000000000..4633ba207
Binary files /dev/null and b/apps/landing/public/favicon.ico differ
diff --git a/apps/landing/src/App.vue b/apps/landing/src/App.vue
index e632401dc..09d38993a 100644
--- a/apps/landing/src/App.vue
+++ b/apps/landing/src/App.vue
@@ -1,12 +1,7 @@
@@ -16,4 +11,4 @@ const {
-
\ No newline at end of file
+@/composables/blog
\ No newline at end of file
diff --git a/apps/landing/src/blogs/blog.md b/apps/landing/src/blogs/blog.md
deleted file mode 100644
index 3e59d5260..000000000
--- a/apps/landing/src/blogs/blog.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Casimir is Live on Goerli!
-
-10/2/2023
-
-We're proud to announce that our distributed, self custody ETH staking platform, Casimir, is live on the ETH Goerli Testnet. Casimir is powered by distributed key generation and distributed validator technology. The Casimir SelfStake manager offers an approach where stakers can directly deposit any amount of ETH to high-performing Ethereum operators. This approach minimizes counterparty risk for users and enhances the decentralization of Ethereum staking:
-* Validators duties are performed by openly registered (and collateralized) operators running distributed validator technology (DVT)
-* Keys are trustlessly managed using zero-coordination distributed key generation (DKG)
-* Automated actions (like compounding stake or handling a slash) are carried out by a decentralized oracle network (DON)
-* The staking user experience is improved by wrapping staking contract actions using account abstraction.
-
-By creating a smart contract primitive that trustlessly connects stakers and node operators, we create a customizable staking process that allows users to access new staking features, such as restaking. Over the next few weeks we'll be introducing some of these additional features, such as restaking, to our platform.
diff --git a/apps/landing/src/composables/blog.ts b/apps/landing/src/composables/blog.ts
new file mode 100644
index 000000000..669a23fa0
--- /dev/null
+++ b/apps/landing/src/composables/blog.ts
@@ -0,0 +1,60 @@
+import { onMounted, onUnmounted, readonly, ref } from 'vue'
+import snarkdown from 'snarkdown'
+import { Article } from '@casimir/types'
+
+const initializeComposable = ref(false)
+
+const blogUrl = import.meta.env.PUBLIC_BLOG_URL || 'http://localhost:4001'
+const articles = ref([] as Article[])
+const loadingArticles = ref(true)
+
+export default function useBlog() {
+ async function getArticleContent(itemId: string) {
+ const response = await fetch(`${blogUrl}/articles/${itemId}`)
+ const json = await response.json()
+ const md = snarkdown(json.content)
+ return md
+ }
+
+ onMounted(async () => {
+ if (!initializeComposable.value) {
+ loadingArticles.value = true
+ try {
+ const response = await fetch(`${blogUrl}/articles`)
+ const jsonList = await response.json()
+ const articleList = []
+
+ for (let i = 0; i < jsonList.length; i++) {
+ const title = jsonList[i].title
+ const content = await getArticleContent(jsonList[i].id)
+ const timestamp = jsonList[i].publishedAt
+ const id = jsonList[i].id
+ articleList.push({
+ title: title,
+ content: content,
+ timestamp: timestamp,
+ type: 'Blog',
+ id: id,
+ })
+ }
+
+ articles.value = articleList
+ loadingArticles.value = false
+ } catch (error) {
+ console.log('Error fetching article', error)
+ loadingArticles.value = false
+ }
+
+ initializeComposable.value = true
+ }
+ })
+
+ onUnmounted(() => {
+ initializeComposable.value = false
+ })
+
+ return {
+ articles: readonly(articles),
+ loadingArticles: readonly(loadingArticles),
+ }
+}
diff --git a/apps/landing/src/composables/blogs.ts b/apps/landing/src/composables/blogs.ts
deleted file mode 100644
index cd106b039..000000000
--- a/apps/landing/src/composables/blogs.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import { onMounted, onUnmounted, readonly, ref } from 'vue'
-import snarkdown from 'snarkdown'
-
-const initializeComposable = ref(false)
-
-type blog = {
- title: string;
- content: string;
- timestamp: string;
- type: string;
- id: string;
-};
-
-const allBlogs = ref([] as blog[])
-const loadingBlogs = ref(true)
-
-export default function useBlogs() {
- async function getContentOfBlog(itemId: string) {
- const response = await fetch(`http://localhost:3003/api/hackmd/${itemId}`)
- const json = await response.json()
- const md = snarkdown(json.content)
-
- return md
- }
-
- onMounted(async () => {
- if (!initializeComposable.value) {
- loadingBlogs.value = true
- try {
- const response = await fetch('http://localhost:3003/api/hackmd')
- const jsonList = await response.json()
- const blogList = []
-
- for (let i = 0; i < jsonList.length; i++) {
- const title = jsonList[i].title
- const content = await getContentOfBlog(jsonList[i].id)
- const timestamp = jsonList[i].publishedAt
- const id = jsonList[i].id
- blogList.push({
- title: title,
- content: content,
- timestamp: timestamp,
- type: 'Blog',
- id: id,
- })
- }
-
- allBlogs.value = blogList
- loadingBlogs.value = false
- } catch (error) {
- console.error('Error trying to fetch:', error)
- loadingBlogs.value = false
- }
-
- initializeComposable.value = true
- }
- })
-
- onUnmounted(() => {
- initializeComposable.value = false
- })
-
- return {
- allBlogs: readonly(allBlogs),
- loadingBlogs: readonly(loadingBlogs),
- }
-}
diff --git a/apps/landing/src/composables/router.ts b/apps/landing/src/composables/router.ts
index 6a5268415..962428b3e 100644
--- a/apps/landing/src/composables/router.ts
+++ b/apps/landing/src/composables/router.ts
@@ -2,35 +2,35 @@ import { createWebHistory, createRouter } from 'vue-router'
import Landing from '@/pages/landing/Landing.vue'
import Changelog from '@/pages/changelog/Changelog.vue'
import Blog from '@/pages/blog/Blog.vue'
-import SingleBlog from '@/pages/blog/components/SingleBlog.vue'
+import Article from '@/pages/blog/components/Article.vue'
const routes = [
- {
- path: '/',
- name: Landing,
- component: Landing,
- },
- {
- path: '/blogs',
- name: Blog,
- component: Blog,
- },
- {
- path: '/blog/:id',
- component: SingleBlog,
- children: [{ path: '', name: SingleBlog, component: SingleBlog }],
- },
- {
- path: '/changelog',
- name: Changelog,
- component: Changelog,
- },
+ {
+ path: '/',
+ name: Landing,
+ component: Landing,
+ },
+ {
+ path: '/blog',
+ name: Blog,
+ component: Blog,
+ },
+ {
+ path: '/blog/:id',
+ component: Article,
+ children: [{ path: '', name: Article, component: Article }],
+ },
+ {
+ path: '/changelog',
+ name: Changelog,
+ component: Changelog,
+ },
]
const router = createRouter({
- history: createWebHistory(),
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore
- routes,
+ history: createWebHistory(),
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore
+ routes,
})
export default router
diff --git a/apps/landing/src/pages/blog/Blog.vue b/apps/landing/src/pages/blog/Blog.vue
index 379880d6c..54bcfe2c7 100644
--- a/apps/landing/src/pages/blog/Blog.vue
+++ b/apps/landing/src/pages/blog/Blog.vue
@@ -1,12 +1,11 @@
-
@@ -25,7 +24,7 @@ const {
API Reference
- Blog
+ Blog
Changelog
@@ -44,35 +43,35 @@ const {
- {{ blog.type }} •
+ {{ article.type }} •
- {{ new Date(blog.timestamp).toDateString() }}
+ {{ new Date(article.timestamp).toDateString() }}
- {{ blog.title }}
+ {{ article.title }}
@@ -125,33 +124,33 @@ const {
\ No newline at end of file
diff --git a/apps/landing/src/pages/blog/components/SingleBlog.vue b/apps/landing/src/pages/blog/components/Article.vue
similarity index 71%
rename from apps/landing/src/pages/blog/components/SingleBlog.vue
rename to apps/landing/src/pages/blog/components/Article.vue
index 0b104cf12..b03de42bf 100644
--- a/apps/landing/src/pages/blog/components/SingleBlog.vue
+++ b/apps/landing/src/pages/blog/components/Article.vue
@@ -1,37 +1,36 @@
-
@@ -51,7 +50,7 @@ watch([allBlogs, loadingBlogs], () => {
API Reference
- Blog
+ Blog
Changelog
@@ -71,7 +70,7 @@ watch([allBlogs, loadingBlogs], () => {
@@ -83,7 +82,7 @@ watch([allBlogs, loadingBlogs], () => {
@@ -106,10 +105,10 @@ watch([allBlogs, loadingBlogs], () => {
- {{ activeBlog.type }}
+ {{ article.type }}
- {{ new Date(activeBlog.timestamp).toDateString() }}
+ {{ new Date(article.timestamp).toDateString() }}
@@ -117,7 +116,7 @@ watch([allBlogs, loadingBlogs], () => {
@@ -160,32 +159,32 @@ watch([allBlogs, loadingBlogs], () => {
\ No newline at end of file
diff --git a/apps/landing/src/pages/changelog/Changelog.vue b/apps/landing/src/pages/changelog/Changelog.vue
index 09edf5ff0..3aa5d79cc 100644
--- a/apps/landing/src/pages/changelog/Changelog.vue
+++ b/apps/landing/src/pages/changelog/Changelog.vue
@@ -92,7 +92,7 @@ document.addEventListener('DOMContentLoaded', async () => {
API Reference
-
Blog
+
Blog
import { ref } from 'vue'
-
+const docsUrl = import.meta.env.PUBLIC_DOCS_URL
const faqItems = ref(
[
{
@@ -74,7 +74,7 @@ const toggleQuestionItem = (index: number) => {
>API Reference
- Blog
+ Blog
Changelog
@@ -331,9 +331,9 @@ const toggleQuestionItem = (index: number) => {
API Reference
+ >Documentation
{
+ if (user.value) initializeBreakdownMetricsComposable()
+ else uninitializeBreakdownMetricsComposable()
+ })
+
+ watch(user, async () => {
+ if (user.value) initializeBreakdownMetricsComposable()
+ else uninitializeBreakdownMetricsComposable()
+ })
const currentStaked = ref({
eth: '0 ETH',
@@ -34,9 +50,10 @@ export default function useBreakdownMetrics() {
async function getAllTimeStakingRewards() : Promise {
try {
/* Get User's Current Stake */
- const addresses = (userValue.value as UserWithAccountsAndOperators).accounts.map((account: Account) => account.address) as string[]
+ const addresses = (user.value as UserWithAccountsAndOperators).accounts.map((account: Account) => account.address) as string[]
const currentUserStakePromises = [] as Array>
- addresses.forEach(address => currentUserStakePromises.push(manager.getUserStake(address)))
+ addresses.forEach(address => currentUserStakePromises.push((defaultManager as CasimirManager).getUserStake(address)))
+ addresses.forEach(address => currentUserStakePromises.push((eigenManager as CasimirManager).getUserStake(address)))
const settledCurrentUserStakePromises = await Promise.allSettled(currentUserStakePromises) as Array>
const currentUserStake = settledCurrentUserStakePromises.filter(result => result.status === 'fulfilled').map(result => result.value)
const currentUserStakeSum = currentUserStake.reduce((acc, curr) => acc.add(curr), ethers.BigNumber.from(0))
@@ -44,7 +61,8 @@ export default function useBreakdownMetrics() {
/* Get User's All Time Deposits and Withdrawals */
const userEventTotalsPromises = [] as Array>
- addresses.forEach(address => {userEventTotalsPromises.push(getContractEventsTotalsByAddress(address))})
+ addresses.forEach(address => {userEventTotalsPromises.push(getContractEventsTotalsByAddress(address, defaultManager))})
+ addresses.forEach(address => {userEventTotalsPromises.push(getContractEventsTotalsByAddress(address, eigenManager))})
const userEventTotals = await Promise.all(userEventTotalsPromises) as Array
const userEventTotalsSum = userEventTotals.reduce((acc, curr) => {
const { StakeDeposited, WithdrawalInitiated } = curr
@@ -73,7 +91,7 @@ export default function useBreakdownMetrics() {
}
}
- async function getContractEventsTotalsByAddress(address: string) : Promise {
+ async function getContractEventsTotalsByAddress(address: string, manager: CasimirManager) : Promise {
try {
const eventList = [
'StakeDeposited',
@@ -81,13 +99,13 @@ export default function useBreakdownMetrics() {
'WithdrawalInitiated'
]
const eventFilters = eventList.map(event => {
- if (event === 'StakeRebalanced') return manager.filters[event]()
- return manager.filters[event](address)
+ if (event === 'StakeRebalanced') return (manager as CasimirManager).filters[event]()
+ return ((manager as CasimirManager).filters as any)[event](address)
})
- // const items = (await Promise.all(eventFilters.map(async eventFilter => await manager.queryFilter(eventFilter, 0, 'latest'))))
+ // const items = (await Promise.all(eventFilters.map(async eventFilter => await (manager as CasimirManager).queryFilter(eventFilter, 0, 'latest'))))
// Use Promise.allSettled to avoid errors when a filter returns no results
- const items = (await Promise.allSettled(eventFilters.map(async eventFilter => await manager.queryFilter(eventFilter, 0, 'latest')))).map(result => result.status === 'fulfilled' ? result.value : [])
+ const items = (await Promise.allSettled(eventFilters.map(async eventFilter => await (manager as CasimirManager).queryFilter(eventFilter, 0, 'latest')))).map(result => result.status === 'fulfilled' ? result.value : [])
const userEventTotals = eventList.reduce((acc, event) => {
acc[event] = 0
@@ -115,9 +133,11 @@ export default function useBreakdownMetrics() {
}
async function getCurrentStaked(): Promise {
- const addresses = (userValue.value as UserWithAccountsAndOperators).accounts.map((account: Account) => account.address) as string[]
+ const addresses = (user.value as UserWithAccountsAndOperators).accounts.map((account: Account) => account.address) as string[]
try {
- const promises = addresses.map((address) => manager.getUserStake(address))
+ const defaultManagerPromises = addresses.map((address) => (defaultManager as CasimirManager).getUserStake(address))
+ const eigenManagerPromises = addresses.map((address) => (eigenManager as CasimirManager).getUserStake(address))
+ const promises = [...defaultManagerPromises, ...eigenManagerPromises]
const settledPromises = await Promise.allSettled(promises) as Array>
const currentStaked = settledPromises
.filter((result) => result.status === 'fulfilled')
@@ -148,7 +168,7 @@ export default function useBreakdownMetrics() {
async function getTotalWalletBalance() : Promise {
const promises = [] as Array>
- const addresses = (userValue.value as UserWithAccountsAndOperators).accounts.map((account: Account) => account.address) as string[]
+ const addresses = (user.value as UserWithAccountsAndOperators).accounts.map((account: Account) => account.address) as string[]
addresses.forEach((address) => { promises.push(getEthersBalance(address)) })
const totalWalletBalance = (await Promise.all(promises)).reduce((acc, curr) => acc + curr, 0)
const totalWalletBalanceUSD = totalWalletBalance * (await getCurrentPrice({ coin: 'ETH', currency: 'USD' }))
@@ -196,18 +216,24 @@ export default function useBreakdownMetrics() {
function listenForContractEvents() {
stopListeningForContractEvents() // Clear old listeners
try {
- manager.on('StakeDeposited', stakeDepositedListener)
- manager.on('StakeRebalanced', stakeRebalancedListener)
- manager.on('WithdrawalInitiated', withdrawalInitiatedListener)
+ (defaultManager as CasimirManager).on('StakeDeposited', stakeDepositedListener);
+ (defaultManager as CasimirManager).on('StakeRebalanced', stakeRebalancedListener);
+ (defaultManager as CasimirManager).on('WithdrawalInitiated', withdrawalInitiatedListener);
+ (eigenManager as CasimirManager).on('StakeDeposited', stakeDepositedListener);
+ (eigenManager as CasimirManager).on('StakeRebalanced', stakeRebalancedListener);
+ (eigenManager as CasimirManager).on('WithdrawalInitiated', withdrawalInitiatedListener)
} catch (err) {
console.log(`There was an error in listenForContractEvents: ${err}`)
}
}
function stopListeningForContractEvents() {
- manager.removeListener('StakeDeposited', stakeDepositedListener)
- manager.removeListener('StakeRebalanced', stakeRebalancedListener)
- manager.removeListener('WithdrawalInitiated', withdrawalInitiatedListener)
+ (defaultManager as CasimirManager).removeListener('StakeDeposited', stakeDepositedListener);
+ (defaultManager as CasimirManager).removeListener('StakeRebalanced', stakeRebalancedListener);
+ (defaultManager as CasimirManager).removeListener('WithdrawalInitiated', withdrawalInitiatedListener);
+ (eigenManager as CasimirManager).removeListener('StakeDeposited', stakeDepositedListener);
+ (eigenManager as CasimirManager).removeListener('StakeRebalanced', stakeRebalancedListener);
+ (eigenManager as CasimirManager).removeListener('WithdrawalInitiated', withdrawalInitiatedListener)
}
const stakeDepositedListener = async () => await refreshBreakdown()
@@ -215,16 +241,16 @@ export default function useBreakdownMetrics() {
const withdrawalInitiatedListener = async () => await refreshBreakdown()
async function blockListener(blockNumber: number) {
- if (!userValue.value) return
+ if (!user.value) return
console.log('blockNumber :>> ', blockNumber)
- const addresses = (userValue.value as UserWithAccountsAndOperators).accounts.map((account: Account) => account.address) as string[]
+ const addresses = (user.value as UserWithAccountsAndOperators).accounts.map((account: Account) => account.address) as string[]
const block = await provider.getBlockWithTransactions(blockNumber)
const txs = block.transactions.map(async (tx: any) => {
if (addresses.includes(tx.from.toLowerCase())) {
console.log('tx :>> ', tx)
try {
- // const response = manager.interface.parseTransaction({ data: tx.data })
+ // const response = (manager as CasimirManager).interface.parseTransaction({ data: tx.data })
// console.log('response :>> ', response)
await refreshBreakdown()
} catch (error) {
@@ -236,8 +262,12 @@ export default function useBreakdownMetrics() {
await Promise.all(txs)
}
- async function initializeComposable(user: UserWithAccountsAndOperators){
- userValue.value = toValue(user)
+ async function initializeBreakdownMetricsComposable(){
+ if (isInitialized.value) return
+ const { defaultManager: defaultManagerFromContracts, eigenManager: eigenManagerFromContracts } = await getContracts()
+ defaultManager = defaultManagerFromContracts
+ eigenManager = eigenManagerFromContracts
+
try {
loadingInitializeBreakdownMetrics.value = true
provider.removeAllListeners('block')
@@ -245,6 +275,7 @@ export default function useBreakdownMetrics() {
listenForContractEvents()
await refreshBreakdown()
loadingInitializeBreakdownMetrics.value = false
+ isInitialized.value = true
} catch (error) {
loadingInitializeBreakdownMetricsError.value = true
console.log('Error initializing breakdown metrics :>> ', error)
@@ -252,10 +283,13 @@ export default function useBreakdownMetrics() {
}
}
- async function uninitializeComposable(){
- userValue.value = undefined
+ async function uninitializeBreakdownMetricsComposable(){
+ const { defaultManager: defaultManagerFromContracts, eigenManager: eigenManagerFromContracts } = await getContracts()
+ defaultManager = defaultManagerFromContracts
+ eigenManager = eigenManagerFromContracts
provider.removeAllListeners('block')
stopListeningForContractEvents()
+ isInitialized.value = false
}
return {
@@ -264,7 +298,7 @@ export default function useBreakdownMetrics() {
loadingInitializeBreakdownMetricsError: readonly(loadingInitializeBreakdownMetricsError),
stakingRewards: readonly(stakingRewards),
totalWalletBalance: readonly(totalWalletBalance),
- initializeComposable,
- uninitializeComposable
+ initializeBreakdownMetricsComposable,
+ uninitializeBreakdownMetricsComposable
}
}
\ No newline at end of file
diff --git a/apps/web/src/composables/contracts.ts b/apps/web/src/composables/contracts.ts
new file mode 100644
index 000000000..f1d276a00
--- /dev/null
+++ b/apps/web/src/composables/contracts.ts
@@ -0,0 +1,37 @@
+import { ethers } from 'ethers'
+import useEnvironment from '@/composables/environment'
+import { ManagerConfig } from '@casimir/types'
+import { CasimirManager, CasimirRegistry, CasimirViews } from '@casimir/ethereum/build/@types'
+import ICasimirManagerAbi from '@casimir/ethereum/build/abi/ICasimirManager.json'
+import ICasimirRegistryAbi from '@casimir/ethereum/build/abi/ICasimirRegistry.json'
+import ICasimirViewsAbi from '@casimir/ethereum/build/abi/ICasimirViews.json'
+
+const { provider, factory } = useEnvironment()
+
+export default function useContracts() {
+ async function getContracts() {
+ const managerConfigs: ManagerConfig[] = await Promise.all((await factory.getManagerIds()).map(async (id: number) => {
+ return await factory.getManagerConfig(id)
+ }))
+ const defaultManager = new ethers.Contract(managerConfigs[0].managerAddress, ICasimirManagerAbi, provider) as CasimirManager
+ const defaultRegistry = new ethers.Contract(managerConfigs[0].registryAddress, ICasimirRegistryAbi, provider) as CasimirRegistry
+ const defaultViews = new ethers.Contract(managerConfigs[0].viewsAddress, ICasimirViewsAbi, provider) as CasimirViews
+
+ const eigenManager = new ethers.Contract(managerConfigs[1].managerAddress, ICasimirManagerAbi, provider) as CasimirManager
+ const eigenRegistry = new ethers.Contract(managerConfigs[1].registryAddress, ICasimirRegistryAbi, provider) as CasimirRegistry
+ const eigenViews = new ethers.Contract(managerConfigs[1].viewsAddress, ICasimirViewsAbi, provider) as CasimirViews
+
+ return {
+ defaultManager,
+ defaultRegistry,
+ defaultViews,
+ eigenManager,
+ eigenRegistry,
+ eigenViews
+ }
+ }
+
+ return {
+ getContracts
+ }
+}
\ No newline at end of file
diff --git a/apps/web/src/composables/environment.ts b/apps/web/src/composables/environment.ts
index f55e36cbc..d0b62c82d 100644
--- a/apps/web/src/composables/environment.ts
+++ b/apps/web/src/composables/environment.ts
@@ -1,50 +1,46 @@
import { ethers } from 'ethers'
-import { CasimirManager, CasimirRegistry, CasimirViews } from '@casimir/ethereum/build/@types'
-import CasimirManagerAbi from '@casimir/ethereum/build/abi/CasimirManager.json'
-import CasimirRegistryAbi from '@casimir/ethereum/build/abi/CasimirRegistry.json'
-import CasimirViewsAbi from '@casimir/ethereum/build/abi/CasimirViews.json'
+import { CasimirFactory } from '@casimir/ethereum/build/@types'
+import ICasimirFactoryAbi from '@casimir/ethereum/build/abi/ICasimirFactory.json'
+/* Browser environment */
const domain = window.location.host
const origin = window.location.origin
-const usersUrl = import.meta.env.PUBLIC_USERS_URL || 'http://localhost:4000'
+
+/* Ethereum environment */
const ethereumUrl = import.meta.env.PUBLIC_ETHEREUM_RPC_URL || 'http://127.0.0.1:8545'
-const ledgerType = import.meta.env.PUBLIC_SPECULOS_URL ? 'speculos' : 'usb'
-const speculosUrl = import.meta.env.PUBLIC_SPECULOS_URL ? 'http://localhost:5001' : ''
-const cryptoCompareApiKey = import.meta.env.PUBLIC_CRYPTO_COMPARE_API_KEY || ''
+const provider = new ethers.providers.JsonRpcProvider(ethereumUrl)
+
+/* Casimir environment */
+const usersUrl = import.meta.env.PUBLIC_USERS_URL || 'http://localhost:4000'
+const walletConnectProjectId = import.meta.env.PUBLIC_WALLET_CONNECT_PROJECT_ID
+
+/* Addresses */
+const factoryAddress = import.meta.env.PUBLIC_FACTORY_ADDRESS
+const factory = new ethers.Contract(factoryAddress, ICasimirFactoryAbi, provider) as CasimirFactory
const ssvNetworkAddress = import.meta.env.PUBLIC_SSV_NETWORK_ADDRESS
const ssvViewsAddress = import.meta.env.PUBLIC_SSV_VIEWS_ADDRESS
-const walletConnectProjectId = import.meta.env.PUBLIC_WALLET_CONNECT_PROJECT_ID
-/* Contracts */
-const managerAddress = import.meta.env.PUBLIC_MANAGER_ADDRESS
-if (!managerAddress) throw new Error('No manager address provided')
-const viewsAddress = import.meta.env.PUBLIC_VIEWS_ADDRESS
-if (!viewsAddress) throw new Error('No views address provided')
-const registryAddress = import.meta.env.PUBLIC_REGISTRY_ADDRESS
-if (!registryAddress) throw new Error('No registry address provided')
-const provider = new ethers.providers.JsonRpcProvider(ethereumUrl)
-const manager: CasimirManager & ethers.Contract = new ethers.Contract(managerAddress, CasimirManagerAbi, provider) as CasimirManager
-const views: CasimirViews & ethers.Contract = new ethers.Contract(viewsAddress, CasimirViewsAbi, provider) as CasimirViews
-const registry: CasimirRegistry & ethers.Contract = new ethers.Contract(registryAddress, CasimirRegistryAbi, provider) as CasimirRegistry
+/* API Keys */
+const cryptoCompareApiKey = import.meta.env.PUBLIC_CRYPTO_COMPARE_API_KEY || ''
+
+/* Emulators */
+const ledgerType = import.meta.env.PUBLIC_SPECULOS_URL ? 'speculos' : 'usb'
+const speculosUrl = import.meta.env.PUBLIC_SPECULOS_URL ? 'http://localhost:5001' : ''
export default function useEnvironment() {
+
return {
domain,
cryptoCompareApiKey,
ethereumUrl,
- manager,
+ factory,
provider,
origin,
ledgerType,
- managerAddress,
- registryAddress,
- registry,
speculosUrl,
ssvNetworkAddress,
ssvViewsAddress,
usersUrl,
- views,
- viewsAddress,
walletConnectProjectId
}
}
\ No newline at end of file
diff --git a/apps/web/src/composables/operators.ts b/apps/web/src/composables/operators.ts
index cee14871f..24d6d3895 100644
--- a/apps/web/src/composables/operators.ts
+++ b/apps/web/src/composables/operators.ts
@@ -1,16 +1,31 @@
import { readonly, ref } from 'vue'
import { Operator, Scanner } from '@casimir/ssv'
-import { Account, Pool, RegisteredOperator, RegisterOperatorWithCasimirParams, UserWithAccountsAndOperators } from '@casimir/types'
+import { Account, PoolConfig, RegisteredOperator, RegisterOperatorWithCasimirParams } from '@casimir/types'
import { ethers } from 'ethers'
+import useContracts from '@/composables/contracts'
import useEnvironment from '@/composables/environment'
import useEthers from '@/composables/ethers'
import useLedger from '@/composables/ledger'
import useTrezor from '@/composables/trezor'
+import useUser from '@/composables/user'
+import useWalletConnectV2 from '@/composables/walletConnectV2'
+import { CasimirManager, CasimirRegistry, CasimirViews } from '@casimir/ethereum/build/@types'
-const { ethereumUrl, manager, registry, ssvNetworkAddress, ssvViewsAddress, usersUrl, views } = useEnvironment()
+let defaultManager: CasimirManager
+let defaultRegistry: CasimirRegistry
+let defaultViews: CasimirViews
+
+// let eigenManager: CasimirManager
+// let eigenRegistry: CasimirRegistry
+// let eigenViews: CasimirViews
+
+const { getContracts } = useContracts()
+const { ethereumUrl, ssvNetworkAddress, ssvViewsAddress, usersUrl } = useEnvironment()
const { ethersProviderList, getEthersBrowserSigner } = useEthers()
const { getEthersLedgerSigner } = useLedger()
const { getEthersTrezorSigner } = useTrezor()
+const { user } = useUser()
+const { getWalletConnectSignerV2 } = useWalletConnectV2()
const loadingInitializeOperators = ref(false)
const loadingInitializeOperatorsError = ref(false)
@@ -43,8 +58,8 @@ export default function useOperators() {
}
}
- async function getUserOperators(user: UserWithAccountsAndOperators): Promise {
- const userAddresses = user?.accounts.map((account: Account) => account.address) as string[]
+ async function getUserOperators(): Promise {
+ const userAddresses = user.value?.accounts.map((account: Account) => account.address) as string[]
const scanner = new Scanner({
ethereumUrl,
@@ -60,20 +75,20 @@ export default function useOperators() {
const casimirOperators: RegisteredOperator[] = []
for (const operator of ssvOperators) {
- const { active, collateral, poolCount, resharing } = await registry.getOperator(operator.id)
+ const { active, collateral, poolCount, resharing } = await (defaultRegistry as CasimirRegistry).getOperator(operator.id)
const registered = active || collateral.gt(0) || poolCount.gt(0) || resharing
if (registered) {
const pools = await _getPools(operator.id)
// TODO: Replace these Public Nodes URLs once we have this working again
const operatorStore = {
- '200': 'https://nodes.casimir.co/eth/goerli/dkg/1',
- '201': 'https://nodes.casimir.co/eth/goerli/dkg/2',
- '202': 'https://nodes.casimir.co/eth/goerli/dkg/3',
- '203': 'https://nodes.casimir.co/eth/goerli/dkg/4',
- '156': 'https://nodes.casimir.co/eth/goerli/dkg/5',
- '157': 'https://nodes.casimir.co/eth/goerli/dkg/6',
- '158': 'https://nodes.casimir.co/eth/goerli/dkg/7',
- '159': 'https://nodes.casimir.co/eth/goerli/dkg/8'
+ '208': 'https://nodes.casimir.co/eth/goerli/dkg/1',
+ '209': 'https://nodes.casimir.co/eth/goerli/dkg/2',
+ '210': 'https://nodes.casimir.co/eth/goerli/dkg/3',
+ '211': 'https://nodes.casimir.co/eth/goerli/dkg/4',
+ '212': 'https://nodes.casimir.co/eth/goerli/dkg/5',
+ '213': 'https://nodes.casimir.co/eth/goerli/dkg/6',
+ '214': 'https://nodes.casimir.co/eth/goerli/dkg/7',
+ '215': 'https://nodes.casimir.co/eth/goerli/dkg/8'
}
const url = operatorStore[operator.id.toString() as keyof typeof operatorStore]
casimirOperators.push({
@@ -97,20 +112,20 @@ export default function useOperators() {
registeredOperators.value = casimirOperators as Array
}
- async function _getPools(operatorId: number): Promise {
- const pools: Pool[] = []
+ async function _getPools(operatorId: number): Promise {
+ const pools: PoolConfig[] = []
const poolIds = [
- ...await manager.getPendingPoolIds(),
- ...await manager.getStakedPoolIds()
+ ...await (defaultManager as CasimirManager).getPendingPoolIds(),
+ ...await (defaultManager as CasimirManager).getStakedPoolIds()
]
for (const poolId of poolIds) {
- const poolDetails = await views.getPool(poolId)
+ const poolConfig = await (defaultViews as CasimirViews).getPoolConfig(poolId)
const pool = {
- ...poolDetails,
- operatorIds: poolDetails.operatorIds.map(id => id.toNumber()),
- reshares: poolDetails.reshares.toNumber()
+ ...poolConfig,
+ operatorIds: poolConfig.operatorIds.map(id => id.toNumber()),
+ reshares: poolConfig.reshares.toNumber()
}
if (pool.operatorIds.includes(operatorId)) {
pools.push(pool)
@@ -119,11 +134,17 @@ export default function useOperators() {
return pools
}
- async function initializeComposable(user: UserWithAccountsAndOperators){
+ async function initializeOperatorComposable(){
try {
+ /* Get Manager, Views, and Registry */
+ const { defaultManager: managerContract, defaultRegistry: registryContract, defaultViews: viewsContract } = await getContracts()
+ defaultManager = managerContract
+ defaultRegistry = registryContract
+ defaultViews = viewsContract
+
loadingInitializeOperators.value = true
- listenForContractEvents(user)
- await getUserOperators(user)
+ listenForContractEvents()
+ await getUserOperators()
loadingInitializeOperators.value = false
} catch (error) {
loadingInitializeOperatorsError.value = true
@@ -132,11 +153,11 @@ export default function useOperators() {
}
}
- function listenForContractEvents(user: UserWithAccountsAndOperators) {
+ function listenForContractEvents() {
try {
- registry.on('OperatorRegistered', () => getUserOperators(user))
- // registry.on('OperatorDeregistered', getUserOperators)
- // registry.on('DeregistrationRequested', getUserOperators)
+ (defaultRegistry as CasimirRegistry).on('OperatorRegistered', () => getUserOperators())
+ // (registry as CasimirRegistry).on('OperatorDeregistered', getUserOperators)
+ // (registry as CasimirRegistry).on('DeregistrationRequested', getUserOperators)
} catch (err) {
console.log(`There was an error in listenForContractEvents: ${err}`)
}
@@ -146,20 +167,19 @@ export default function useOperators() {
async function registerOperatorWithCasimir({ walletProvider, address, operatorId, collateral, nodeUrl }: RegisterOperatorWithCasimirParams) {
loadingRegisteredOperators.value = true
try {
- const signerCreators = {
- 'Browser': getEthersBrowserSigner,
- 'Ledger': getEthersLedgerSigner,
- 'Trezor': getEthersTrezorSigner
- }
- const signerType = ethersProviderList.includes(walletProvider) ? 'Browser' : walletProvider
- const signerCreator = signerCreators[signerType as keyof typeof signerCreators]
let signer
- if (walletProvider === 'WalletConnect') {
- // signer = nonReactiveWalletConnectWeb3Provider
+ if (ethersProviderList.includes(walletProvider)) {
+ signer = getEthersBrowserSigner(walletProvider)
+ } else if (walletProvider === 'WalletConnect') {
+ await getWalletConnectSignerV2()
+ } else if (walletProvider === 'Ledger') {
+ getEthersLedgerSigner()
+ } else if (walletProvider === 'Trezor') {
+ getEthersTrezorSigner()
} else {
- signer = signerCreator(walletProvider)
+ throw new Error(`Invalid wallet provider: ${walletProvider}`)
}
- const result = await registry.connect(signer as ethers.Signer).registerOperator(operatorId, { from: address, value: ethers.utils.parseEther(collateral)})
+ const result = await (defaultRegistry as CasimirRegistry).connect(signer as ethers.Signer).registerOperator(operatorId, { from: address, value: ethers.utils.parseEther(collateral)})
// TODO: @shanejearley - How many confirmations do we want to wait?
await result?.wait(1)
await addOperator({address, nodeUrl})
@@ -178,7 +198,7 @@ export default function useOperators() {
loadingAddOperatorError: readonly(loadingAddOperatorError),
loadingInitializeOperators: readonly(loadingInitializeOperators),
loadingInitializeOperatorsError: readonly(loadingInitializeOperatorsError),
- initializeComposable,
+ initializeOperatorComposable,
registerOperatorWithCasimir,
}
}
diff --git a/apps/web/src/composables/staking.ts b/apps/web/src/composables/staking.ts
index cf33c4ca4..97cf357ba 100644
--- a/apps/web/src/composables/staking.ts
+++ b/apps/web/src/composables/staking.ts
@@ -1,36 +1,55 @@
+import { ref } from 'vue'
import { ethers } from 'ethers'
import { ProviderString } from '@casimir/types'
-import useEnvironment from './environment'
+import useContracts from '@/composables/contracts'
import useEthers from '@/composables/ethers'
import useLedger from '@/composables/ledger'
import useTrezor from '@/composables/trezor'
import useWalletConnectV2 from './walletConnectV2'
+import { CasimirManager } from '@casimir/ethereum/build/@types'
-const { manager } = useEnvironment()
+const { getContracts } = useContracts()
const { ethersProviderList, getEthersBrowserSigner } = useEthers()
const { getEthersLedgerSigner } = useLedger()
const { getEthersTrezorSigner } = useTrezor()
const { getWalletConnectSignerV2 } = useWalletConnectV2()
+const stakingComposableInitialized = ref(false)
+
+let defaultManager: CasimirManager
+let eigenManager: CasimirManager
+
export default function useStaking() {
+
+ async function initializeStakingComposable(){
+ if (stakingComposableInitialized.value) return
+ try {
+ /* Get Managers */
+ const { defaultManager: defaultManagerFromContracts, eigenManager: eigenManagerFromContracts } = await getContracts()
+ defaultManager = defaultManagerFromContracts
+ eigenManager = eigenManagerFromContracts
+ stakingComposableInitialized.value = true
+ } catch (error) {
+ console.log('Error initializing staking component :>> ', error)
+ }
+ }
- async function deposit({ amount, walletProvider }: { amount: string, walletProvider: ProviderString }) {
+ async function deposit({ amount, walletProvider, type }: { amount: string, walletProvider: ProviderString, type: 'default' | 'eigen' }) {
try {
- const signerCreators = {
- 'Browser': getEthersBrowserSigner,
- 'Ledger': getEthersLedgerSigner,
- 'Trezor': getEthersTrezorSigner,
- 'WalletConnect': getWalletConnectSignerV2
- }
- const signerType = ethersProviderList.includes(walletProvider) ? 'Browser' : walletProvider
- const signerCreator = signerCreators[signerType as keyof typeof signerCreators]
let signer
- if (walletProvider === 'WalletConnect') {
- signer = await signerCreator(walletProvider)
+ if (ethersProviderList.includes(walletProvider)) {
+ signer = getEthersBrowserSigner(walletProvider)
+ } else if (walletProvider === 'WalletConnect') {
+ await getWalletConnectSignerV2()
+ } else if (walletProvider === 'Ledger') {
+ getEthersLedgerSigner()
+ } else if (walletProvider === 'Trezor') {
+ getEthersTrezorSigner()
} else {
- signer = signerCreator(walletProvider)
+ throw new Error(`Invalid wallet provider: ${walletProvider}`)
}
- const managerSigner = manager.connect(signer as ethers.Signer)
+ const manager = type === 'default' ? defaultManager : eigenManager
+ const managerSigner = (manager as CasimirManager).connect(signer as ethers.Signer)
const fees = await getDepositFees()
const depositAmount = parseFloat(amount) * ((100 + fees) / 100)
const value = ethers.utils.parseEther(depositAmount.toString())
@@ -44,7 +63,7 @@ export default function useStaking() {
async function getDepositFees(): Promise {
try {
// TODO: Fix this bug
- // const fees = await manager.FEE_PERCENT()
+ // const fees = await (manager as CasimirManager).FEE_PERCENT()
const fees = 5
const feesRounded = Math.round(fees * 100) / 100
return feesRounded
@@ -55,10 +74,14 @@ export default function useStaking() {
}
async function getUserStake(address: string): Promise {
+ if (!stakingComposableInitialized.value) return 0
try {
- const bigNumber = await manager.getUserStake(address)
- const number = parseFloat(ethers.utils.formatEther(bigNumber))
- return number
+ const defaultManagerBigNumber = await (defaultManager as CasimirManager).getUserStake(address)
+ const number = parseFloat(ethers.utils.formatEther(defaultManagerBigNumber))
+ const eigenManagerBigNumber = await (eigenManager as CasimirManager).getUserStake(address)
+ const number2 = parseFloat(ethers.utils.formatEther(eigenManagerBigNumber))
+ const total = number + number2
+ return total
} catch (err) {
console.error(`There was an error in getUserStake function: ${JSON.stringify(err)}`)
return 0
@@ -66,28 +89,28 @@ export default function useStaking() {
}
async function withdraw({ amount, walletProvider }: { amount: string, walletProvider: ProviderString }) {
- const signerCreators = {
- 'Browser': getEthersBrowserSigner,
- 'Ledger': getEthersLedgerSigner,
- 'Trezor': getEthersTrezorSigner,
- 'WalletConnect': getWalletConnectSignerV2
- }
- const signerType = ['MetaMask', 'CoinbaseWallet'].includes(walletProvider) ? 'Browser' : walletProvider
- const signerCreator = signerCreators[signerType as keyof typeof signerCreators]
let signer
- if (walletProvider === 'WalletConnect') {
- signer = await signerCreator(walletProvider)
- } else {
- signer = signerCreator(walletProvider)
- }
- const managerSigner = manager.connect(signer as ethers.Signer)
+ if (ethersProviderList.includes(walletProvider)) {
+ signer = getEthersBrowserSigner(walletProvider)
+ } else if (walletProvider === 'WalletConnect') {
+ await getWalletConnectSignerV2()
+ } else if (walletProvider === 'Ledger') {
+ getEthersLedgerSigner()
+ } else if (walletProvider === 'Trezor') {
+ getEthersTrezorSigner()
+ } else {
+ throw new Error(`Invalid wallet provider: ${walletProvider}`)
+ }
+ const managerSigner = (manager as CasimirManager).connect(signer as ethers.Signer)
const value = ethers.utils.parseEther(amount)
- // const withdrawableBalance = await manager.getWithdrawableBalance()
+ // const withdrawableBalance = await (manager as CasimirManager).getWithdrawableBalance()
const result = await managerSigner.requestWithdrawal(value)
return await result.wait()
}
return {
+ stakingComposableInitialized,
+ initializeStakingComposable,
deposit,
getDepositFees,
getUserStake,
diff --git a/apps/web/src/pages/operators/Operator.vue b/apps/web/src/pages/operators/Operator.vue
index f6e571435..51840fce4 100644
--- a/apps/web/src/pages/operators/Operator.vue
+++ b/apps/web/src/pages/operators/Operator.vue
@@ -3,17 +3,17 @@ import { onMounted, ref, watch } from 'vue'
import VueFeather from 'vue-feather'
import { ProviderString } from '@casimir/types'
import useAuth from '@/composables/auth'
-import useEthers from '@/composables/ethers'
+// import useEthers from '@/composables/ethers'
import useFiles from '@/composables/files'
import useFormat from '@/composables/format'
import useOperators from '@/composables/operators'
import useUser from '@/composables/user'
-import { UserWithAccountsAndOperators} from '@casimir/types'
const { loadingSessionLogin } = useAuth()
-const { detectActiveWalletAddress } = useEthers()
+// const { detectActiveWalletAddress } = useEthers()
const { exportFile } = useFiles()
const { convertString } = useFormat()
+const {initializeOperatorComposable, nonregisteredOperators, registeredOperators, registerOperatorWithCasimir, loadingInitializeOperators, loadingAddOperator } = useOperators()
const { user } = useUser()
// Form inputs
@@ -90,7 +90,7 @@ const submitButtonTxt = ref('Submit')
onMounted(async () => {
if (user.value) {
- await initializeComposable(user.value as UserWithAccountsAndOperators)
+ await initializeOperatorComposable()
// Autofill disable
const disableAutofill = () => {
@@ -106,11 +106,9 @@ onMounted(async () => {
}
})
-const {initializeComposable, nonregisteredOperators, registeredOperators, registerOperatorWithCasimir, loadingInitializeOperators, loadingAddOperator } = useOperators()
-
watch(user, async () => {
if (user.value) {
- await initializeComposable(user.value as UserWithAccountsAndOperators)
+ await initializeOperatorComposable()
filterData()
}
@@ -230,10 +228,10 @@ async function submitRegisterOperatorForm() {
const selectedAddress = selectedWallet.value.address
const selectedProvider = selectedWallet.value.walletProvider
- const activeAddress = await detectActiveWalletAddress(selectedProvider)
- if (activeAddress !== selectedAddress) {
- return alert(`The account you selected is not the same as the one that is active in your ${selectedProvider} wallet. Please open your browser extension and select the account that you want to log in with.`)
- }
+ // const activeAddress = await detectActiveWalletAddress(selectedProvider)
+ // if (activeAddress !== selectedAddress) {
+ // return alert(`The account you selected is not the same as the one that is active in your ${selectedProvider} wallet. Please open your browser extension and select the account that you want to log in with.`)
+ // }
try {
await registerOperatorWithCasimir({
diff --git a/apps/web/src/pages/overview/components/BreakdownChart.vue b/apps/web/src/pages/overview/components/BreakdownChart.vue
index f89f4aa51..f5b1bb327 100644
--- a/apps/web/src/pages/overview/components/BreakdownChart.vue
+++ b/apps/web/src/pages/overview/components/BreakdownChart.vue
@@ -8,7 +8,7 @@ import { AnalyticsData, ProviderString, UserAnalyticsData, UserWithAccountsAndOp
import useBreakdownMetrics from '@/composables/breakdownMetrics'
const { user } = useUser()
-const { currentStaked, stakingRewards, totalWalletBalance, initializeComposable, uninitializeComposable } = useBreakdownMetrics()
+const { currentStaked, stakingRewards, totalWalletBalance, initializeBreakdownMetricsComposable, uninitializeBreakdownMetricsComposable } = useBreakdownMetrics()
const { screenWidth } = useScreenDimensions()
const chardId = ref('cross_provider_chart')
@@ -96,33 +96,21 @@ const setChartData = (userAnalytics: UserAnalyticsData) => {
}
}
-
const {userAnalytics, updateAnalytics, initializeAnalyticsComposable } = useAnalytics()
-onMounted(() => {
- if(user.value){
- initializeComposable(user.value as UserWithAccountsAndOperators)
- initializeAnalyticsComposable()
- }else{
- uninitializeComposable()
- }
+watch(userAnalytics, () => {
setChartData(userAnalytics.value as UserAnalyticsData)
})
-watch(selectedTimeframe, () => {
+onMounted(() => {
setChartData(userAnalytics.value as UserAnalyticsData)
})
-watch(userAnalytics, () => {
+watch(selectedTimeframe, () => {
setChartData(userAnalytics.value as UserAnalyticsData)
})
watch(user, async () => {
- if (user.value) {
- initializeComposable(user.value as UserWithAccountsAndOperators)
- } else {
- uninitializeComposable()
- }
await updateAnalytics()
setChartData(userAnalytics.value as UserAnalyticsData)
})
diff --git a/apps/web/src/pages/overview/components/Staking.vue b/apps/web/src/pages/overview/components/Staking.vue
index d233408b9..602e6c2d5 100644
--- a/apps/web/src/pages/overview/components/Staking.vue
+++ b/apps/web/src/pages/overview/components/Staking.vue
@@ -10,8 +10,8 @@ import useUser from '@/composables/user'
import TermsOfService from '@/components/TermsOfService.vue'
-const { deposit, getDepositFees, getUserStake } = useStaking()
-const { detectActiveWalletAddress, getEthersBalance } = useEthers()
+const { stakingComposableInitialized, deposit, getDepositFees, getUserStake, initializeStakingComposable } = useStaking()
+const { getEthersBalance } = useEthers()
const { convertString } = useFormat()
const { getCurrentPrice } = usePrice()
const { user, updateUserAgreement } = useUser()
@@ -19,6 +19,7 @@ const { user, updateUserAgreement } = useUser()
// Staking Component Refs
const addressBalance = ref(null)
const currentEthPrice = ref(0)
+const stakeType = ref<'default' | 'eigen'>('default')
const currentUserStake = ref(0)
const estimatedFees = ref('-')
const formattedAmountToStake = ref('')
@@ -115,6 +116,7 @@ watch(formattedAmountToStake, async () => {
})
watch(selectedWalletAddress, async () => {
+ if (!stakingComposableInitialized.value) return
if (selectedWalletAddress.value) {
addressBalance.value = (Math.round(await getEthersBalance(selectedWalletAddress.value) * 100) / 100) + ' ETH'
currentUserStake.value = await getUserStake(selectedWalletAddress.value)
@@ -125,6 +127,7 @@ watch(selectedWalletAddress, async () => {
})
watch(user, async () => {
+ if (!stakingComposableInitialized.value) return
if (user.value?.id) {
aggregateAddressesByProvider()
termsOfServiceCheckbox.value = user.value?.agreedToTermsOfService as boolean
@@ -143,6 +146,8 @@ watch(user, async () => {
})
onMounted(async () => {
+ // TODO: @ccali11 - Want to make sure this is non-blocking
+ await initializeStakingComposable()
aggregateAddressesByProvider()
currentEthPrice.value = Math.round((await getCurrentPrice({ coin: 'ETH', currency: 'USD' })) * 100) / 100
if (user.value?.id) {
@@ -150,6 +155,7 @@ onMounted(async () => {
addressBalance.value = (Math.round(await getEthersBalance(user.value?.address as string) * 100) / 100) + ' ETH'
selectedStakingProvider.value = user.value?.walletProvider as ProviderString
selectedWalletAddress.value = user.value?.address as string
+ if (!stakingComposableInitialized.value) return
currentUserStake.value = await getUserStake(selectedWalletAddress.value as string)
}
})
@@ -192,13 +198,17 @@ watch(openTermsOfService, ()=>{
const handleDeposit = async () => {
stakeButtonText.value = 'Staking...'
- const activeAddress = await detectActiveWalletAddress(selectedStakingProvider.value)
- if (activeAddress !== selectedWalletAddress.value) {
- formattedAmountToStake.value = ''
- return alert(`The account you selected is not the same as the one that is active in your ${selectedStakingProvider.value} wallet. Please open your browser extension and select the account that you want to log in with.`)
- }
+ // const activeAddress = await detectActiveWalletAddress(selectedStakingProvider.value)
+ // if (activeAddress !== selectedWalletAddress.value) {
+ // formattedAmountToStake.value = ''
+ // return alert(`The account you selected is not the same as the one that is active in your ${selectedStakingProvider.value} wallet. Please open your browser extension and select the account that you want to log in with.`)
+ // }
- const result = await deposit({ amount: formattedAmountToStake.value, walletProvider: selectedStakingProvider.value })
+ const result = await deposit({
+ amount: formattedAmountToStake.value,
+ walletProvider: selectedStakingProvider.value,
+ type: stakeType.value
+ })
if (!result) stakeButtonText.value = 'Failed!'
stakeButtonText.value = 'Staked!'
@@ -218,7 +228,6 @@ const handleDeposit = async () => {
console.log('waitResponse :>> ', waitResponse)
}
-
currentUserStake.value = await getUserStake(selectedWalletAddress.value as string)
}
@@ -351,7 +360,8 @@ const handleDeposit = async () => {
- {{ estimatedFees }}.00%
+
+ 5.00%
diff --git a/common/data/README.md b/common/data/README.md
index 8cad9e990..4e5179f48 100644
--- a/common/data/README.md
+++ b/common/data/README.md
@@ -1,6 +1,6 @@
# Casimir Data
-Casimir schemas, databases, and notebooks for data modeling, exploration, and analytics
+Casimir database JSON schemas
## Schemas
@@ -15,41 +15,3 @@ Find the core JSON schemas in [src/schemas](src/schemas). These are the source o
| Users (Postgres) | `nonces` | [nonce.schema.json](src/schemas/nonce.schema.json) | User auth nonces |
| Users (Postgres) | `users` | [user.schema.json](src/schemas/user.schema.json) | User profiles |
| Users (Postgres) | `user_accounts` | [user_account.schema.json](src/schemas/user_account.schema.json) | User account relations |
-
-## Notebooks
-
-The Jupyter Notebooks in [notebooks/](notebooks/) are a supplement for data work, including a documented Athena query sandbox, system diagrams, and flowcharts.
-
-### Prerequisites
-
-Make sure your development environment has these prerequisites.
-
-1. [Python (v3.x)](https://www.python.org/downloads/) – we use [pyenv](https://github.com/pyenv/pyenv#installation) to manage Python versions.
-
-2. [Poetry](https://python-poetry.org/docs/#installation) – this manages and packages Python dependencies.
-
-3. [AWS CLI (v2.x)](https://aws.amazon.com/cli/) – create an [AWS profile](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) named `consensus-networks-dev`.
-
-4. [Jupyter VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter) – this gives us a complete Jupyter Notebook environment in VSCode.
-
-### Setup
-
-With the Poetry and the Jupyter VSCode Extension, we have a one-time setup.
-
-1. Install dependencies and create a Jupyter kernel.
-
- ```zsh
- cd common/data
- poetry install
- poetry run ipython kernel install --user --name=casimir-data
- ```
-
- > 🚩 If you have node and npm already set up for this repo, you can run `npm run configure:python --workspace @casimir/data` from the root directory instead.
-
-2. Restart VSCode (Jupyter needs this to see your new kernel).
-
-3. Open one of the notebooks in `notebooks/` and select the kernel dropdown in the top right – choose the option with casimir-data in the name.
-
-Now you can run cells in the notebooks upon returning to this workspace in VSCode.
-
-> 🚩 To change Python dependencies for the notebook environment, change into this directory (`cd common/data`) and use the poetry CLI `poetry add
` or `poetry remove `.
diff --git a/common/data/notebooks/athena.ipynb b/common/data/notebooks/athena.ipynb
deleted file mode 100644
index 8dabf3442..000000000
--- a/common/data/notebooks/athena.ipynb
+++ /dev/null
@@ -1,280 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Casimir Athena\n",
- "\n",
- "[Athena](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/athena.html) integrated data environment and query sandbox\n",
- "\n",
- "## Table of Contents\n",
- "\n",
- "* [Install Packages](#install-packages)\n",
- "* [Configure Athena](#configure-athena)\n",
- "* [Configure Plotting](#configure-plotting)\n",
- "* [Introspect Schema](#introspect-schema)\n",
- "* [Sample Usage](#sample-usage)\n",
- " * [Top New Stakes 2021](#top-new-stakes-2021)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Install Packages\n",
- "\n",
- "The primary package is [pyathena](https://pypi.org/project/pyathena/), a library for querying Amazon Athena and retrieving results with ease."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Interact with AWS credentials and environment overrides\n",
- "import os\n",
- "from dotenv import load_dotenv\n",
- "import boto3\n",
- "import boto3.session\n",
- "\n",
- "# Query Athena\n",
- "from pyathena import connect\n",
- "\n",
- "# Handle results\n",
- "import warnings\n",
- "import pandas as pd\n",
- "import matplotlib.pyplot as plt\n",
- "from matplotlib.dates import DateFormatter"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Configure Athena\n",
- "\n",
- "We use the AWS credentials from your configured AWS profile (default `consensus-networks-dev`) to initialize the pyathena connection and define a DB query method."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "load_dotenv()\n",
- "PROFILE=os.getenv('PROFILE')\n",
- "profile = PROFILE or 'consensus-networks-dev'\n",
- "session = boto3.Session(profile_name=profile)\n",
- "creds = session.get_credentials()\n",
- "\n",
- "connection = connect(\n",
- " aws_access_key_id=creds.access_key, \n",
- " aws_secret_access_key=creds.secret_key, \n",
- " s3_staging_dir=\"s3://casimir-etl-output-bucket-dev/\", \n",
- " region_name=\"us-east-2\"\n",
- ")\n",
- "\n",
- "def db_query(sql_query: str) -> pd.DataFrame:\n",
- " \"\"\"Execute SQL Query and get pandas dataframe\"\"\"\n",
- " with warnings.catch_warnings():\n",
- " # Ignore warning for non-SQLAlchemy connecton\n",
- " warnings.simplefilter('ignore', UserWarning)\n",
- " df = pd.read_sql_query(sql_query, connection)\n",
- " return df"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "> 🚩 You can override the default profile name by setting PROFILE in your project root `.env` file. See [Environment](../../../README.md#environment) for more information."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Configure Plotting\n",
- "\n",
- "We have some custom plotting and formatting functions that can be helpful to visualize the results of Athena queries."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "def get_cmap(n, name='hsv'):\n",
- " '''Returns a function that maps each index in 0, 1, ..., n-1 to a distinct \n",
- " RGB color; the keyword argument name must be a standard mpl colormap name.'''\n",
- " return plt.cm.get_cmap(name, n)\n",
- "\n",
- "month_day = DateFormatter(\"%m-%d\")\n",
- "number_commas = plt.FuncFormatter(lambda x, p: format(int(x), ','))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Introspect Schema\n",
- "\n",
- "View the current Glue tables stored in [common/data/src/schemas](common/data/src/schemas)."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "ename": "URLError",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
- "File \u001b[0;32m/usr/local/Cellar/python@3.9/3.9.17_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py:1503\u001b[0m, in \u001b[0;36mFileHandler.open_local_file\u001b[0;34m(self, req)\u001b[0m\n\u001b[1;32m 1502\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m-> 1503\u001b[0m stats \u001b[39m=\u001b[39m os\u001b[39m.\u001b[39;49mstat(localfile)\n\u001b[1;32m 1504\u001b[0m size \u001b[39m=\u001b[39m stats\u001b[39m.\u001b[39mst_size\n",
- "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/Users/shane/Developer/consensusnetworks/casimir/common/data/notebooks/../../src/schemas/event.schema.json'",
- "\nDuring handling of the above exception, another exception occurred:\n",
- "\u001b[0;31mURLError\u001b[0m Traceback (most recent call last)",
- "\u001b[1;32m/Users/shane/Developer/consensusnetworks/casimir/common/data/notebooks/athena.ipynb Cell 10\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1 \u001b[0m current_dir \u001b[39m=\u001b[39m os\u001b[39m.\u001b[39mgetcwd()\n\u001b[0;32m----> 3 \u001b[0m event_json \u001b[39m=\u001b[39m pd\u001b[39m.\u001b[39;49mread_json(\u001b[39m'\u001b[39;49m\u001b[39mfile://\u001b[39;49m\u001b[39m'\u001b[39;49m \u001b[39m+\u001b[39;49m current_dir \u001b[39m+\u001b[39;49m \u001b[39m'\u001b[39;49m\u001b[39m/../../src/schemas/event.schema.json\u001b[39;49m\u001b[39m'\u001b[39;49m)\n\u001b[1;32m 4 \u001b[0m agg_json \u001b[39m=\u001b[39m pd\u001b[39m.\u001b[39mread_json(\u001b[39m'\u001b[39m\u001b[39mfile://\u001b[39m\u001b[39m'\u001b[39m \u001b[39m+\u001b[39m current_dir \u001b[39m+\u001b[39m \u001b[39m'\u001b[39m\u001b[39m/../../src/schemas/agg.schema.json\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[1;32m 6 \u001b[0m \u001b[39mprint\u001b[39m(\u001b[39m'\u001b[39m\u001b[39m-\u001b[39m\u001b[39m'\u001b[39m\u001b[39m*\u001b[39m\u001b[39m70\u001b[39m)\n",
- "File \u001b[0;32m~/Library/Caches/pypoetry/virtualenvs/data-BHDcAdoN-py3.9/lib/python3.9/site-packages/pandas/util/_decorators.py:207\u001b[0m, in \u001b[0;36mdeprecate_kwarg.._deprecate_kwarg..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 205\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 206\u001b[0m kwargs[new_arg_name] \u001b[39m=\u001b[39m new_arg_value\n\u001b[0;32m--> 207\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n",
- "File \u001b[0;32m~/Library/Caches/pypoetry/virtualenvs/data-BHDcAdoN-py3.9/lib/python3.9/site-packages/pandas/util/_decorators.py:311\u001b[0m, in \u001b[0;36mdeprecate_nonkeyword_arguments..decorate..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 305\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mlen\u001b[39m(args) \u001b[39m>\u001b[39m num_allow_args:\n\u001b[1;32m 306\u001b[0m warnings\u001b[39m.\u001b[39mwarn(\n\u001b[1;32m 307\u001b[0m msg\u001b[39m.\u001b[39mformat(arguments\u001b[39m=\u001b[39marguments),\n\u001b[1;32m 308\u001b[0m \u001b[39mFutureWarning\u001b[39;00m,\n\u001b[1;32m 309\u001b[0m stacklevel\u001b[39m=\u001b[39mstacklevel,\n\u001b[1;32m 310\u001b[0m )\n\u001b[0;32m--> 311\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n",
- "File \u001b[0;32m~/Library/Caches/pypoetry/virtualenvs/data-BHDcAdoN-py3.9/lib/python3.9/site-packages/pandas/io/json/_json.py:588\u001b[0m, in \u001b[0;36mread_json\u001b[0;34m(path_or_buf, orient, typ, dtype, convert_axes, convert_dates, keep_default_dates, numpy, precise_float, date_unit, encoding, encoding_errors, lines, chunksize, compression, nrows, storage_options)\u001b[0m\n\u001b[1;32m 585\u001b[0m \u001b[39mif\u001b[39;00m convert_axes \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mand\u001b[39;00m orient \u001b[39m!=\u001b[39m \u001b[39m\"\u001b[39m\u001b[39mtable\u001b[39m\u001b[39m\"\u001b[39m:\n\u001b[1;32m 586\u001b[0m convert_axes \u001b[39m=\u001b[39m \u001b[39mTrue\u001b[39;00m\n\u001b[0;32m--> 588\u001b[0m json_reader \u001b[39m=\u001b[39m JsonReader(\n\u001b[1;32m 589\u001b[0m path_or_buf,\n\u001b[1;32m 590\u001b[0m orient\u001b[39m=\u001b[39;49morient,\n\u001b[1;32m 591\u001b[0m typ\u001b[39m=\u001b[39;49mtyp,\n\u001b[1;32m 592\u001b[0m dtype\u001b[39m=\u001b[39;49mdtype,\n\u001b[1;32m 593\u001b[0m convert_axes\u001b[39m=\u001b[39;49mconvert_axes,\n\u001b[1;32m 594\u001b[0m convert_dates\u001b[39m=\u001b[39;49mconvert_dates,\n\u001b[1;32m 595\u001b[0m keep_default_dates\u001b[39m=\u001b[39;49mkeep_default_dates,\n\u001b[1;32m 596\u001b[0m numpy\u001b[39m=\u001b[39;49mnumpy,\n\u001b[1;32m 597\u001b[0m precise_float\u001b[39m=\u001b[39;49mprecise_float,\n\u001b[1;32m 598\u001b[0m date_unit\u001b[39m=\u001b[39;49mdate_unit,\n\u001b[1;32m 599\u001b[0m encoding\u001b[39m=\u001b[39;49mencoding,\n\u001b[1;32m 600\u001b[0m lines\u001b[39m=\u001b[39;49mlines,\n\u001b[1;32m 601\u001b[0m chunksize\u001b[39m=\u001b[39;49mchunksize,\n\u001b[1;32m 602\u001b[0m compression\u001b[39m=\u001b[39;49mcompression,\n\u001b[1;32m 603\u001b[0m nrows\u001b[39m=\u001b[39;49mnrows,\n\u001b[1;32m 604\u001b[0m storage_options\u001b[39m=\u001b[39;49mstorage_options,\n\u001b[1;32m 605\u001b[0m encoding_errors\u001b[39m=\u001b[39;49mencoding_errors,\n\u001b[1;32m 606\u001b[0m )\n\u001b[1;32m 608\u001b[0m \u001b[39mif\u001b[39;00m chunksize:\n\u001b[1;32m 609\u001b[0m \u001b[39mreturn\u001b[39;00m json_reader\n",
- "File \u001b[0;32m~/Library/Caches/pypoetry/virtualenvs/data-BHDcAdoN-py3.9/lib/python3.9/site-packages/pandas/io/json/_json.py:673\u001b[0m, in \u001b[0;36mJsonReader.__init__\u001b[0;34m(self, filepath_or_buffer, orient, typ, dtype, convert_axes, convert_dates, keep_default_dates, numpy, precise_float, date_unit, encoding, lines, chunksize, compression, nrows, storage_options, encoding_errors)\u001b[0m\n\u001b[1;32m 670\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mlines:\n\u001b[1;32m 671\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39mnrows can only be passed if lines=True\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 673\u001b[0m data \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_get_data_from_filepath(filepath_or_buffer)\n\u001b[1;32m 674\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdata \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_preprocess_data(data)\n",
- "File \u001b[0;32m~/Library/Caches/pypoetry/virtualenvs/data-BHDcAdoN-py3.9/lib/python3.9/site-packages/pandas/io/json/_json.py:710\u001b[0m, in \u001b[0;36mJsonReader._get_data_from_filepath\u001b[0;34m(self, filepath_or_buffer)\u001b[0m\n\u001b[1;32m 703\u001b[0m filepath_or_buffer \u001b[39m=\u001b[39m stringify_path(filepath_or_buffer)\n\u001b[1;32m 704\u001b[0m \u001b[39mif\u001b[39;00m (\n\u001b[1;32m 705\u001b[0m \u001b[39mnot\u001b[39;00m \u001b[39misinstance\u001b[39m(filepath_or_buffer, \u001b[39mstr\u001b[39m)\n\u001b[1;32m 706\u001b[0m \u001b[39mor\u001b[39;00m is_url(filepath_or_buffer)\n\u001b[1;32m 707\u001b[0m \u001b[39mor\u001b[39;00m is_fsspec_url(filepath_or_buffer)\n\u001b[1;32m 708\u001b[0m \u001b[39mor\u001b[39;00m file_exists(filepath_or_buffer)\n\u001b[1;32m 709\u001b[0m ):\n\u001b[0;32m--> 710\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mhandles \u001b[39m=\u001b[39m get_handle(\n\u001b[1;32m 711\u001b[0m filepath_or_buffer,\n\u001b[1;32m 712\u001b[0m \u001b[39m\"\u001b[39;49m\u001b[39mr\u001b[39;49m\u001b[39m\"\u001b[39;49m,\n\u001b[1;32m 713\u001b[0m encoding\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mencoding,\n\u001b[1;32m 714\u001b[0m compression\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcompression,\n\u001b[1;32m 715\u001b[0m storage_options\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mstorage_options,\n\u001b[1;32m 716\u001b[0m errors\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mencoding_errors,\n\u001b[1;32m 717\u001b[0m )\n\u001b[1;32m 718\u001b[0m filepath_or_buffer \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mhandles\u001b[39m.\u001b[39mhandle\n\u001b[1;32m 720\u001b[0m \u001b[39mreturn\u001b[39;00m filepath_or_buffer\n",
- "File \u001b[0;32m~/Library/Caches/pypoetry/virtualenvs/data-BHDcAdoN-py3.9/lib/python3.9/site-packages/pandas/io/common.py:667\u001b[0m, in \u001b[0;36mget_handle\u001b[0;34m(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)\u001b[0m\n\u001b[1;32m 664\u001b[0m codecs\u001b[39m.\u001b[39mlookup_error(errors)\n\u001b[1;32m 666\u001b[0m \u001b[39m# open URLs\u001b[39;00m\n\u001b[0;32m--> 667\u001b[0m ioargs \u001b[39m=\u001b[39m _get_filepath_or_buffer(\n\u001b[1;32m 668\u001b[0m path_or_buf,\n\u001b[1;32m 669\u001b[0m encoding\u001b[39m=\u001b[39;49mencoding,\n\u001b[1;32m 670\u001b[0m compression\u001b[39m=\u001b[39;49mcompression,\n\u001b[1;32m 671\u001b[0m mode\u001b[39m=\u001b[39;49mmode,\n\u001b[1;32m 672\u001b[0m storage_options\u001b[39m=\u001b[39;49mstorage_options,\n\u001b[1;32m 673\u001b[0m )\n\u001b[1;32m 675\u001b[0m handle \u001b[39m=\u001b[39m ioargs\u001b[39m.\u001b[39mfilepath_or_buffer\n\u001b[1;32m 676\u001b[0m handles: \u001b[39mlist\u001b[39m[BaseBuffer]\n",
- "File \u001b[0;32m~/Library/Caches/pypoetry/virtualenvs/data-BHDcAdoN-py3.9/lib/python3.9/site-packages/pandas/io/common.py:336\u001b[0m, in \u001b[0;36m_get_filepath_or_buffer\u001b[0;34m(filepath_or_buffer, encoding, compression, mode, storage_options)\u001b[0m\n\u001b[1;32m 334\u001b[0m \u001b[39m# assuming storage_options is to be interpreted as headers\u001b[39;00m\n\u001b[1;32m 335\u001b[0m req_info \u001b[39m=\u001b[39m urllib\u001b[39m.\u001b[39mrequest\u001b[39m.\u001b[39mRequest(filepath_or_buffer, headers\u001b[39m=\u001b[39mstorage_options)\n\u001b[0;32m--> 336\u001b[0m \u001b[39mwith\u001b[39;00m urlopen(req_info) \u001b[39mas\u001b[39;00m req:\n\u001b[1;32m 337\u001b[0m content_encoding \u001b[39m=\u001b[39m req\u001b[39m.\u001b[39mheaders\u001b[39m.\u001b[39mget(\u001b[39m\"\u001b[39m\u001b[39mContent-Encoding\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39mNone\u001b[39;00m)\n\u001b[1;32m 338\u001b[0m \u001b[39mif\u001b[39;00m content_encoding \u001b[39m==\u001b[39m \u001b[39m\"\u001b[39m\u001b[39mgzip\u001b[39m\u001b[39m\"\u001b[39m:\n\u001b[1;32m 339\u001b[0m \u001b[39m# Override compression based on Content-Encoding header\u001b[39;00m\n",
- "File \u001b[0;32m~/Library/Caches/pypoetry/virtualenvs/data-BHDcAdoN-py3.9/lib/python3.9/site-packages/pandas/io/common.py:236\u001b[0m, in \u001b[0;36murlopen\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 230\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 231\u001b[0m \u001b[39mLazy-import wrapper for stdlib urlopen, as that imports a big chunk of\u001b[39;00m\n\u001b[1;32m 232\u001b[0m \u001b[39mthe stdlib.\u001b[39;00m\n\u001b[1;32m 233\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 234\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39murllib\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mrequest\u001b[39;00m\n\u001b[0;32m--> 236\u001b[0m \u001b[39mreturn\u001b[39;00m urllib\u001b[39m.\u001b[39;49mrequest\u001b[39m.\u001b[39;49murlopen(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n",
- "File \u001b[0;32m/usr/local/Cellar/python@3.9/3.9.17_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py:214\u001b[0m, in \u001b[0;36murlopen\u001b[0;34m(url, data, timeout, cafile, capath, cadefault, context)\u001b[0m\n\u001b[1;32m 212\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 213\u001b[0m opener \u001b[39m=\u001b[39m _opener\n\u001b[0;32m--> 214\u001b[0m \u001b[39mreturn\u001b[39;00m opener\u001b[39m.\u001b[39;49mopen(url, data, timeout)\n",
- "File \u001b[0;32m/usr/local/Cellar/python@3.9/3.9.17_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py:517\u001b[0m, in \u001b[0;36mOpenerDirector.open\u001b[0;34m(self, fullurl, data, timeout)\u001b[0m\n\u001b[1;32m 514\u001b[0m req \u001b[39m=\u001b[39m meth(req)\n\u001b[1;32m 516\u001b[0m sys\u001b[39m.\u001b[39maudit(\u001b[39m'\u001b[39m\u001b[39murllib.Request\u001b[39m\u001b[39m'\u001b[39m, req\u001b[39m.\u001b[39mfull_url, req\u001b[39m.\u001b[39mdata, req\u001b[39m.\u001b[39mheaders, req\u001b[39m.\u001b[39mget_method())\n\u001b[0;32m--> 517\u001b[0m response \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_open(req, data)\n\u001b[1;32m 519\u001b[0m \u001b[39m# post-process response\u001b[39;00m\n\u001b[1;32m 520\u001b[0m meth_name \u001b[39m=\u001b[39m protocol\u001b[39m+\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m_response\u001b[39m\u001b[39m\"\u001b[39m\n",
- "File \u001b[0;32m/usr/local/Cellar/python@3.9/3.9.17_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py:534\u001b[0m, in \u001b[0;36mOpenerDirector._open\u001b[0;34m(self, req, data)\u001b[0m\n\u001b[1;32m 531\u001b[0m \u001b[39mreturn\u001b[39;00m result\n\u001b[1;32m 533\u001b[0m protocol \u001b[39m=\u001b[39m req\u001b[39m.\u001b[39mtype\n\u001b[0;32m--> 534\u001b[0m result \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_call_chain(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mhandle_open, protocol, protocol \u001b[39m+\u001b[39;49m\n\u001b[1;32m 535\u001b[0m \u001b[39m'\u001b[39;49m\u001b[39m_open\u001b[39;49m\u001b[39m'\u001b[39;49m, req)\n\u001b[1;32m 536\u001b[0m \u001b[39mif\u001b[39;00m result:\n\u001b[1;32m 537\u001b[0m \u001b[39mreturn\u001b[39;00m result\n",
- "File \u001b[0;32m/usr/local/Cellar/python@3.9/3.9.17_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py:494\u001b[0m, in \u001b[0;36mOpenerDirector._call_chain\u001b[0;34m(self, chain, kind, meth_name, *args)\u001b[0m\n\u001b[1;32m 492\u001b[0m \u001b[39mfor\u001b[39;00m handler \u001b[39min\u001b[39;00m handlers:\n\u001b[1;32m 493\u001b[0m func \u001b[39m=\u001b[39m \u001b[39mgetattr\u001b[39m(handler, meth_name)\n\u001b[0;32m--> 494\u001b[0m result \u001b[39m=\u001b[39m func(\u001b[39m*\u001b[39;49margs)\n\u001b[1;32m 495\u001b[0m \u001b[39mif\u001b[39;00m result \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 496\u001b[0m \u001b[39mreturn\u001b[39;00m result\n",
- "File \u001b[0;32m/usr/local/Cellar/python@3.9/3.9.17_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py:1481\u001b[0m, in \u001b[0;36mFileHandler.file_open\u001b[0;34m(self, req)\u001b[0m\n\u001b[1;32m 1479\u001b[0m \u001b[39mraise\u001b[39;00m URLError(\u001b[39m\"\u001b[39m\u001b[39mfile:// scheme is supported only on localhost\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m 1480\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m-> 1481\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mopen_local_file(req)\n",
- "File \u001b[0;32m/usr/local/Cellar/python@3.9/3.9.17_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py:1520\u001b[0m, in \u001b[0;36mFileHandler.open_local_file\u001b[0;34m(self, req)\u001b[0m\n\u001b[1;32m 1518\u001b[0m \u001b[39mreturn\u001b[39;00m addinfourl(\u001b[39mopen\u001b[39m(localfile, \u001b[39m'\u001b[39m\u001b[39mrb\u001b[39m\u001b[39m'\u001b[39m), headers, origurl)\n\u001b[1;32m 1519\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mOSError\u001b[39;00m \u001b[39mas\u001b[39;00m exp:\n\u001b[0;32m-> 1520\u001b[0m \u001b[39mraise\u001b[39;00m URLError(exp)\n\u001b[1;32m 1521\u001b[0m \u001b[39mraise\u001b[39;00m URLError(\u001b[39m'\u001b[39m\u001b[39mfile not on local host\u001b[39m\u001b[39m'\u001b[39m)\n",
- "\u001b[0;31mURLError\u001b[0m: "
- ]
- }
- ],
- "source": [
- "current_dir = os.getcwd()\n",
- "\n",
- "event_json = pd.read_json('file://' + current_dir + '/../../src/schemas/event.schema.json')\n",
- "agg_json = pd.read_json('file://' + current_dir + '/../../src/schemas/agg.schema.json')\n",
- "\n",
- "print('-'*70)\n",
- "\n",
- "print('\\u0332'.join('Event Table'))\n",
- "print (\"{:<25} {:<10} {:<35}\".format('Property', 'Type', 'Description'))\n",
- "for key in event_json.properties.keys():\n",
- " type = event_json.properties[key]['type']\n",
- " description = event_json.properties[key]['description']\n",
- " print (\"{:<25} {:<10} {:<35}\".format(key, type, description))\n",
- "\n",
- "print('-'*70)\n",
- "\n",
- "print('\\u0332'.join('Agg Table'))\n",
- "print (\"{:<25} {:<10} {:<35}\".format('Property', 'Type', 'Description'))\n",
- "for key in agg_json.properties.keys():\n",
- " type = agg_json.properties[key]['type']\n",
- " description = agg_json.properties[key]['description']\n",
- " print (\"{:<25} {:<10} {:<35}\".format(key, type, description))\n",
- "\n",
- "print('-'*70)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Sample Usage\n",
- "\n",
- "We can treat this notebook as a sandbox for querying Athena, further analyzing patterns, and plotting results. This section will demonstrate a few basic queries and how to use the plotting functions."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Top New Stakes 2021\n",
- "\n",
- "Get the top 10 new user stakes created in 2021 and label the staked candidate. A \"New Stake\" excludes transactions where the user deposits additional funds to an existing stake."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mJupyter cannot be started. Error attempting to locate Jupyter: Running cells with 'casimir-iwQBMhik' requires the jupyter and notebook package.\n",
- "\u001b[1;31mRun the following command to install 'jupyter and notebook' into the Python environment. \n",
- "\u001b[1;31mCommand: 'python -m pip install jupyter notebook -U\n",
- "\u001b[1;31mor\n",
- "\u001b[1;31mconda install jupyter notebook -U'\n",
- "\u001b[1;31mClick here for more info."
- ]
- }
- ],
- "source": [
- "query = \"\"\"\n",
- " SELECT \n",
- " date_trunc('day', created_at) as Day, \n",
- " candidate as Candidate,\n",
- " SUM(CAST(amount AS double) / power(10, 18)) AS Amount\n",
- " FROM \n",
- " casimir_etl_database_dev.casimir_etl_event_table_dev\n",
- " WHERE \n",
- " type = 'create_stake' AND year(created_at) = 2021\n",
- " GROUP BY \n",
- " date_trunc('day', created_at),\n",
- " candidate\n",
- " ORDER BY \n",
- " Amount DESC\n",
- " LIMIT 10\n",
- " \"\"\"\n",
- " \n",
- "dataframe = db_query(query)\n",
- "\n",
- "_, ax = plt.subplots()\n",
- "ax.set_title('Top New Stakes 2021')\n",
- "ax.xaxis.set_major_formatter(month_day)\n",
- "ax.yaxis.set_major_formatter(number_commas)\n",
- "cmap = get_cmap(len(dataframe))\n",
- "for index, (key,group) in enumerate(dataframe.groupby('Candidate')):\n",
- " group.plot.scatter(ax=ax, x='Day', y='Amount', label=key, color=cmap(index), legend=True)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "casimir-data",
- "language": "python",
- "name": "casimir-data"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.17"
- },
- "orig_nbformat": 4
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/common/data/notebooks/dkg.ipynb b/common/data/notebooks/dkg.ipynb
deleted file mode 100644
index 9c7e9c0a0..000000000
--- a/common/data/notebooks/dkg.ipynb
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Check DKG "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Casimir Goerli DKG messenger is responding and healthy\n"
- ]
- }
- ],
- "source": [
- "import requests\n",
- "\n",
- "url = f\"https://nodes.casimir.co/eth/goerli/dkg/messenger/ping\"\n",
- "\n",
- "response = requests.get(url)\n",
- "\n",
- "if response.status_code != 200:\n",
- " print(f\"Casimir Goerli DKG messenger server is not responding\")\n",
- "else: \n",
- " data = response.json()\n",
- " if data['message'] == \"pong\":\n",
- " print(f\"Casimir Goerli DKG messenger is responding and healthy\")\n",
- " else:\n",
- " print(f\"Casimir Goerli DKG messenger is responding and not healthy\")"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "casimir-data",
- "language": "python",
- "name": "casimir-data"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.17"
- },
- "orig_nbformat": 4
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/common/data/notebooks/ethereum.ipynb b/common/data/notebooks/ethereum.ipynb
deleted file mode 100644
index dbd920ca4..000000000
--- a/common/data/notebooks/ethereum.ipynb
+++ /dev/null
@@ -1,97 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Check Ethereum"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Local goerli node is fully synced\n",
- "Casimir goerli node is fully synced\n"
- ]
- }
- ],
- "source": [
- "import json\n",
- "import boto3\n",
- "import requests\n",
- "from requests.auth import HTTPBasicAuth\n",
- "\n",
- "networks = {\n",
- " # \"mainnet\": {\n",
- " # \"requires_auth\": True\n",
- " # },\n",
- " \"goerli\": {\n",
- " \"requires_auth\": True\n",
- " },\n",
- " # \"hardhat\": {\n",
- " # \"requires_auth\": False\n",
- " # }\n",
- "}\n",
- "\n",
- "for network, requires_auth in networks.items():\n",
- "\n",
- " url = f\"https://nodes.casimir.co/eth/{network}\"\n",
- "\n",
- " headers = {'content-type': 'application/json'}\n",
- " payload = {\n",
- " \"method\": \"eth_syncing\",\n",
- " \"params\": [],\n",
- " \"jsonrpc\": \"2.0\",\n",
- " \"id\": 0,\n",
- " }\n",
- "\n",
- " auth = None\n",
- " if requires_auth:\n",
- " client = boto3.client('secretsmanager')\n",
- " response = client.get_secret_value(SecretId='casimir-rpc-credentials')\n",
- " secret = json.loads(response['SecretString'])\n",
- " auth = HTTPBasicAuth(secret['username'], secret['password'])\n",
- "\n",
- " response = requests.post(url, data=json.dumps(payload), headers=headers, auth=auth)\n",
- "\n",
- " if response.status_code != 200:\n",
- " print(f\"Casimir {network} node is not responding\")\n",
- " else: \n",
- " data = response.json()\n",
- " if data['result'] == False:\n",
- " print(f\"Casimir {network} node is fully synced\")\n",
- " else:\n",
- " print(f\"Casimir {network} node is syncing. Current block: {data['result']['currentBlock']}, Highest block: {data['result']['highestBlock']}\")\n",
- "\n"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "casimir-data",
- "language": "python",
- "name": "casimir-data"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.17"
- },
- "orig_nbformat": 4
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/common/data/package.json b/common/data/package.json
index 2dc274cb0..20091fbc6 100644
--- a/common/data/package.json
+++ b/common/data/package.json
@@ -5,7 +5,7 @@
"main": "src/index.ts",
"scripts": {
"build": "echo '@casimir/data build not specified. Disregard this warning and any listed errors above if @casimir/data is not needed for the current project build.' && exit 0",
- "configure:python": "poetry install && poetry run ipython kernel install --user --name=casimir-data",
+ "python": "poetry install && poetry run ipython kernel install --user --name=casimir-data",
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
diff --git a/common/data/poetry.lock b/common/data/poetry.lock
deleted file mode 100644
index 86a3bf9f0..000000000
--- a/common/data/poetry.lock
+++ /dev/null
@@ -1,2419 +0,0 @@
-# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
-
-[[package]]
-name = "aiobotocore"
-version = "2.3.4"
-description = "Async client for aws services using botocore and aiohttp"
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "aiobotocore-2.3.4-py3-none-any.whl", hash = "sha256:eae059eb51726cee4de2027cfc72bfccc76cf0c229d6b2b08f640e53a568f657"},
- {file = "aiobotocore-2.3.4.tar.gz", hash = "sha256:6554ebea5764f66f4be544a4fcaa0953ee80e600dd7bd818ba4893d72bf12bfb"},
-]
-
-[package.dependencies]
-aiohttp = ">=3.3.1"
-aioitertools = ">=0.5.1"
-botocore = ">=1.24.21,<1.24.22"
-wrapt = ">=1.10.10"
-
-[package.extras]
-awscli = ["awscli (>=1.22.76,<1.22.77)"]
-boto3 = ["boto3 (>=1.21.21,<1.21.22)"]
-
-[[package]]
-name = "aiohttp"
-version = "3.8.1"
-description = "Async http client/server framework (asyncio)"
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "aiohttp-3.8.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1ed0b6477896559f17b9eaeb6d38e07f7f9ffe40b9f0f9627ae8b9926ae260a8"},
- {file = "aiohttp-3.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7dadf3c307b31e0e61689cbf9e06be7a867c563d5a63ce9dca578f956609abf8"},
- {file = "aiohttp-3.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a79004bb58748f31ae1cbe9fa891054baaa46fb106c2dc7af9f8e3304dc30316"},
- {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12de6add4038df8f72fac606dff775791a60f113a725c960f2bab01d8b8e6b15"},
- {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f0d5f33feb5f69ddd57a4a4bd3d56c719a141080b445cbf18f238973c5c9923"},
- {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eaba923151d9deea315be1f3e2b31cc39a6d1d2f682f942905951f4e40200922"},
- {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:099ebd2c37ac74cce10a3527d2b49af80243e2a4fa39e7bce41617fbc35fa3c1"},
- {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2e5d962cf7e1d426aa0e528a7e198658cdc8aa4fe87f781d039ad75dcd52c516"},
- {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fa0ffcace9b3aa34d205d8130f7873fcfefcb6a4dd3dd705b0dab69af6712642"},
- {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:61bfc23df345d8c9716d03717c2ed5e27374e0fe6f659ea64edcd27b4b044cf7"},
- {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:31560d268ff62143e92423ef183680b9829b1b482c011713ae941997921eebc8"},
- {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:01d7bdb774a9acc838e6b8f1d114f45303841b89b95984cbb7d80ea41172a9e3"},
- {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:97ef77eb6b044134c0b3a96e16abcb05ecce892965a2124c566af0fd60f717e2"},
- {file = "aiohttp-3.8.1-cp310-cp310-win32.whl", hash = "sha256:c2aef4703f1f2ddc6df17519885dbfa3514929149d3ff900b73f45998f2532fa"},
- {file = "aiohttp-3.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:713ac174a629d39b7c6a3aa757b337599798da4c1157114a314e4e391cd28e32"},
- {file = "aiohttp-3.8.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:473d93d4450880fe278696549f2e7aed8cd23708c3c1997981464475f32137db"},
- {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99b5eeae8e019e7aad8af8bb314fb908dd2e028b3cdaad87ec05095394cce632"},
- {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3af642b43ce56c24d063325dd2cf20ee012d2b9ba4c3c008755a301aaea720ad"},
- {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3630c3ef435c0a7c549ba170a0633a56e92629aeed0e707fec832dee313fb7a"},
- {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4a4a4e30bf1edcad13fb0804300557aedd07a92cabc74382fdd0ba6ca2661091"},
- {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f8b01295e26c68b3a1b90efb7a89029110d3a4139270b24fda961893216c440"},
- {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a25fa703a527158aaf10dafd956f7d42ac6d30ec80e9a70846253dd13e2f067b"},
- {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5bfde62d1d2641a1f5173b8c8c2d96ceb4854f54a44c23102e2ccc7e02f003ec"},
- {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:51467000f3647d519272392f484126aa716f747859794ac9924a7aafa86cd411"},
- {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:03a6d5349c9ee8f79ab3ff3694d6ce1cfc3ced1c9d36200cb8f08ba06bd3b782"},
- {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:102e487eeb82afac440581e5d7f8f44560b36cf0bdd11abc51a46c1cd88914d4"},
- {file = "aiohttp-3.8.1-cp36-cp36m-win32.whl", hash = "sha256:4aed991a28ea3ce320dc8ce655875e1e00a11bdd29fe9444dd4f88c30d558602"},
- {file = "aiohttp-3.8.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b0e20cddbd676ab8a64c774fefa0ad787cc506afd844de95da56060348021e96"},
- {file = "aiohttp-3.8.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:37951ad2f4a6df6506750a23f7cbabad24c73c65f23f72e95897bb2cecbae676"},
- {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c23b1ad869653bc818e972b7a3a79852d0e494e9ab7e1a701a3decc49c20d51"},
- {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:15b09b06dae900777833fe7fc4b4aa426556ce95847a3e8d7548e2d19e34edb8"},
- {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:477c3ea0ba410b2b56b7efb072c36fa91b1e6fc331761798fa3f28bb224830dd"},
- {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2f2f69dca064926e79997f45b2f34e202b320fd3782f17a91941f7eb85502ee2"},
- {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ef9612483cb35171d51d9173647eed5d0069eaa2ee812793a75373447d487aa4"},
- {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6d69f36d445c45cda7b3b26afef2fc34ef5ac0cdc75584a87ef307ee3c8c6d00"},
- {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:55c3d1072704d27401c92339144d199d9de7b52627f724a949fc7d5fc56d8b93"},
- {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b9d00268fcb9f66fbcc7cd9fe423741d90c75ee029a1d15c09b22d23253c0a44"},
- {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:07b05cd3305e8a73112103c834e91cd27ce5b4bd07850c4b4dbd1877d3f45be7"},
- {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c34dc4958b232ef6188c4318cb7b2c2d80521c9a56c52449f8f93ab7bc2a8a1c"},
- {file = "aiohttp-3.8.1-cp37-cp37m-win32.whl", hash = "sha256:d2f9b69293c33aaa53d923032fe227feac867f81682f002ce33ffae978f0a9a9"},
- {file = "aiohttp-3.8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6ae828d3a003f03ae31915c31fa684b9890ea44c9c989056fea96e3d12a9fa17"},
- {file = "aiohttp-3.8.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0c7ebbbde809ff4e970824b2b6cb7e4222be6b95a296e46c03cf050878fc1785"},
- {file = "aiohttp-3.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8b7ef7cbd4fec9a1e811a5de813311ed4f7ac7d93e0fda233c9b3e1428f7dd7b"},
- {file = "aiohttp-3.8.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c3d6a4d0619e09dcd61021debf7059955c2004fa29f48788a3dfaf9c9901a7cd"},
- {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:718626a174e7e467f0558954f94af117b7d4695d48eb980146016afa4b580b2e"},
- {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:589c72667a5febd36f1315aa6e5f56dd4aa4862df295cb51c769d16142ddd7cd"},
- {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ed076098b171573161eb146afcb9129b5ff63308960aeca4b676d9d3c35e700"},
- {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:086f92daf51a032d062ec5f58af5ca6a44d082c35299c96376a41cbb33034675"},
- {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:11691cf4dc5b94236ccc609b70fec991234e7ef8d4c02dd0c9668d1e486f5abf"},
- {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:31d1e1c0dbf19ebccbfd62eff461518dcb1e307b195e93bba60c965a4dcf1ba0"},
- {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:11a67c0d562e07067c4e86bffc1553f2cf5b664d6111c894671b2b8712f3aba5"},
- {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:bb01ba6b0d3f6c68b89fce7305080145d4877ad3acaed424bae4d4ee75faa950"},
- {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:44db35a9e15d6fe5c40d74952e803b1d96e964f683b5a78c3cc64eb177878155"},
- {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:844a9b460871ee0a0b0b68a64890dae9c415e513db0f4a7e3cab41a0f2fedf33"},
- {file = "aiohttp-3.8.1-cp38-cp38-win32.whl", hash = "sha256:7d08744e9bae2ca9c382581f7dce1273fe3c9bae94ff572c3626e8da5b193c6a"},
- {file = "aiohttp-3.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:04d48b8ce6ab3cf2097b1855e1505181bdd05586ca275f2505514a6e274e8e75"},
- {file = "aiohttp-3.8.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f5315a2eb0239185af1bddb1abf472d877fede3cc8d143c6cddad37678293237"},
- {file = "aiohttp-3.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a996d01ca39b8dfe77440f3cd600825d05841088fd6bc0144cc6c2ec14cc5f74"},
- {file = "aiohttp-3.8.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:13487abd2f761d4be7c8ff9080de2671e53fff69711d46de703c310c4c9317ca"},
- {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea302f34477fda3f85560a06d9ebdc7fa41e82420e892fc50b577e35fc6a50b2"},
- {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2f635ce61a89c5732537a7896b6319a8fcfa23ba09bec36e1b1ac0ab31270d2"},
- {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e999f2d0e12eea01caeecb17b653f3713d758f6dcc770417cf29ef08d3931421"},
- {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0770e2806a30e744b4e21c9d73b7bee18a1cfa3c47991ee2e5a65b887c49d5cf"},
- {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d15367ce87c8e9e09b0f989bfd72dc641bcd04ba091c68cd305312d00962addd"},
- {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6c7cefb4b0640703eb1069835c02486669312bf2f12b48a748e0a7756d0de33d"},
- {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:71927042ed6365a09a98a6377501af5c9f0a4d38083652bcd2281a06a5976724"},
- {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:28d490af82bc6b7ce53ff31337a18a10498303fe66f701ab65ef27e143c3b0ef"},
- {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:b6613280ccedf24354406caf785db748bebbddcf31408b20c0b48cb86af76866"},
- {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:81e3d8c34c623ca4e36c46524a3530e99c0bc95ed068fd6e9b55cb721d408fb2"},
- {file = "aiohttp-3.8.1-cp39-cp39-win32.whl", hash = "sha256:7187a76598bdb895af0adbd2fb7474d7f6025d170bc0a1130242da817ce9e7d1"},
- {file = "aiohttp-3.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:1c182cb873bc91b411e184dab7a2b664d4fea2743df0e4d57402f7f3fa644bac"},
- {file = "aiohttp-3.8.1.tar.gz", hash = "sha256:fc5471e1a54de15ef71c1bc6ebe80d4dc681ea600e68bfd1cbce40427f0b7578"},
-]
-
-[package.dependencies]
-aiosignal = ">=1.1.2"
-async-timeout = ">=4.0.0a3,<5.0"
-attrs = ">=17.3.0"
-charset-normalizer = ">=2.0,<3.0"
-frozenlist = ">=1.1.1"
-multidict = ">=4.5,<7.0"
-yarl = ">=1.0,<2.0"
-
-[package.extras]
-speedups = ["Brotli", "aiodns", "cchardet"]
-
-[[package]]
-name = "aioitertools"
-version = "0.10.0"
-description = "itertools and builtins for AsyncIO and mixed iterables"
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "aioitertools-0.10.0-py3-none-any.whl", hash = "sha256:a2ea2a39ebf272a2fbb58bfdb73e1daeeb6686edbbc8082215dfc8b8ffffa6e8"},
- {file = "aioitertools-0.10.0.tar.gz", hash = "sha256:7d1d1d4a03d462c5a0840787d3df098f125847e0d38b833b30f8f8cbc45a1420"},
-]
-
-[package.dependencies]
-typing_extensions = {version = ">=4.0", markers = "python_version < \"3.10\""}
-
-[[package]]
-name = "aiosignal"
-version = "1.2.0"
-description = "aiosignal: a list of registered asynchronous callbacks"
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "aiosignal-1.2.0-py3-none-any.whl", hash = "sha256:26e62109036cd181df6e6ad646f91f0dcfd05fe16d0cb924138ff2ab75d64e3a"},
- {file = "aiosignal-1.2.0.tar.gz", hash = "sha256:78ed67db6c7b7ced4f98e495e572106d5c432a93e1ddd1bf475e1dc05f5b7df2"},
-]
-
-[package.dependencies]
-frozenlist = ">=1.1.0"
-
-[[package]]
-name = "appnope"
-version = "0.1.3"
-description = "Disable App Nap on macOS >= 10.9"
-optional = false
-python-versions = "*"
-files = [
- {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"},
- {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"},
-]
-
-[[package]]
-name = "argon2-cffi"
-version = "21.3.0"
-description = "The secure Argon2 password hashing algorithm."
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"},
- {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"},
-]
-
-[package.dependencies]
-argon2-cffi-bindings = "*"
-
-[package.extras]
-dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"]
-docs = ["furo", "sphinx", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"]
-
-[[package]]
-name = "argon2-cffi-bindings"
-version = "21.2.0"
-description = "Low-level CFFI bindings for Argon2"
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"},
- {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"},
- {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"},
- {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"},
- {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"},
- {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"},
- {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"},
- {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"},
- {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"},
- {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"},
- {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"},
- {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"},
- {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"},
- {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"},
- {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"},
- {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"},
- {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"},
- {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"},
- {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"},
- {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"},
- {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"},
-]
-
-[package.dependencies]
-cffi = ">=1.0.1"
-
-[package.extras]
-dev = ["cogapp", "pre-commit", "pytest", "wheel"]
-tests = ["pytest"]
-
-[[package]]
-name = "asttokens"
-version = "2.0.5"
-description = "Annotate AST trees with source code positions"
-optional = false
-python-versions = "*"
-files = [
- {file = "asttokens-2.0.5-py2.py3-none-any.whl", hash = "sha256:0844691e88552595a6f4a4281a9f7f79b8dd45ca4ccea82e5e05b4bbdb76705c"},
- {file = "asttokens-2.0.5.tar.gz", hash = "sha256:9a54c114f02c7a9480d56550932546a3f1fe71d8a02f1bc7ccd0ee3ee35cf4d5"},
-]
-
-[package.dependencies]
-six = "*"
-
-[package.extras]
-test = ["astroid", "pytest"]
-
-[[package]]
-name = "async-timeout"
-version = "4.0.2"
-description = "Timeout context manager for asyncio programs"
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"},
- {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"},
-]
-
-[[package]]
-name = "attrs"
-version = "22.1.0"
-description = "Classes Without Boilerplate"
-optional = false
-python-versions = ">=3.5"
-files = [
- {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"},
- {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"},
-]
-
-[package.extras]
-dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"]
-docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"]
-tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"]
-tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"]
-
-[[package]]
-name = "backcall"
-version = "0.2.0"
-description = "Specifications for callback functions passed in to an API"
-optional = false
-python-versions = "*"
-files = [
- {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"},
- {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"},
-]
-
-[[package]]
-name = "beautifulsoup4"
-version = "4.11.1"
-description = "Screen-scraping library"
-optional = false
-python-versions = ">=3.6.0"
-files = [
- {file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"},
- {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"},
-]
-
-[package.dependencies]
-soupsieve = ">1.2"
-
-[package.extras]
-html5lib = ["html5lib"]
-lxml = ["lxml"]
-
-[[package]]
-name = "bleach"
-version = "5.0.1"
-description = "An easy safelist-based HTML-sanitizing tool."
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"},
- {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"},
-]
-
-[package.dependencies]
-six = ">=1.9.0"
-webencodings = "*"
-
-[package.extras]
-css = ["tinycss2 (>=1.1.0,<1.2)"]
-dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"]
-
-[[package]]
-name = "boto3"
-version = "1.21.21"
-description = "The AWS SDK for Python"
-optional = false
-python-versions = ">= 3.6"
-files = [
- {file = "boto3-1.21.21-py3-none-any.whl", hash = "sha256:8fa32fcc8be38327bd667237223d71e5e4b2475f39d6882aca4dbad19fff8c29"},
- {file = "boto3-1.21.21.tar.gz", hash = "sha256:6fa0622f308cfd1da758966fc98b52fbd74b80606d14586c8ad82c7a6c4f32d0"},
-]
-
-[package.dependencies]
-botocore = ">=1.24.21,<1.25.0"
-jmespath = ">=0.7.1,<2.0.0"
-s3transfer = ">=0.5.0,<0.6.0"
-
-[package.extras]
-crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
-
-[[package]]
-name = "botocore"
-version = "1.24.21"
-description = "Low-level, data-driven core of boto 3."
-optional = false
-python-versions = ">= 3.6"
-files = [
- {file = "botocore-1.24.21-py3-none-any.whl", hash = "sha256:92daca8775e738a9db9b465d533019285f09d541e903233261299fd87c2f842c"},
- {file = "botocore-1.24.21.tar.gz", hash = "sha256:7e976cfd0a61601e74624ef8f5246b40a01f2cce73a011ef29cf80a6e371d0fa"},
-]
-
-[package.dependencies]
-jmespath = ">=0.7.1,<2.0.0"
-python-dateutil = ">=2.1,<3.0.0"
-urllib3 = ">=1.25.4,<1.27"
-
-[package.extras]
-crt = ["awscrt (==0.13.5)"]
-
-[[package]]
-name = "certifi"
-version = "2023.5.7"
-description = "Python package for providing Mozilla's CA Bundle."
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"},
- {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"},
-]
-
-[[package]]
-name = "cffi"
-version = "1.15.1"
-description = "Foreign Function Interface for Python calling C code."
-optional = false
-python-versions = "*"
-files = [
- {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"},
- {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"},
- {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"},
- {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"},
- {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"},
- {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"},
- {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"},
- {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"},
- {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"},
- {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"},
- {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"},
- {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"},
- {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"},
- {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"},
- {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"},
- {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"},
- {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"},
- {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"},
- {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"},
- {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"},
- {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"},
- {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"},
- {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"},
- {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"},
- {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"},
- {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"},
- {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"},
- {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"},
- {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"},
- {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"},
- {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"},
- {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"},
- {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"},
- {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"},
- {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"},
- {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"},
- {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"},
- {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"},
- {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"},
- {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"},
- {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"},
- {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"},
- {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"},
- {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"},
- {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"},
- {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"},
- {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"},
- {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"},
- {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"},
- {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"},
- {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"},
- {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"},
- {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"},
- {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"},
- {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"},
- {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"},
- {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"},
- {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"},
- {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"},
- {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"},
- {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"},
- {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"},
- {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"},
- {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"},
-]
-
-[package.dependencies]
-pycparser = "*"
-
-[[package]]
-name = "charset-normalizer"
-version = "2.1.0"
-description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
-optional = false
-python-versions = ">=3.6.0"
-files = [
- {file = "charset-normalizer-2.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"},
- {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"},
-]
-
-[package.extras]
-unicode-backport = ["unicodedata2"]
-
-[[package]]
-name = "colorama"
-version = "0.4.4"
-description = "Cross-platform colored terminal text."
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-files = [
- {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
- {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
-]
-
-[[package]]
-name = "cycler"
-version = "0.11.0"
-description = "Composable style cycles"
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"},
- {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"},
-]
-
-[[package]]
-name = "debugpy"
-version = "1.6.2"
-description = "An implementation of the Debug Adapter Protocol for Python"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "debugpy-1.6.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:77a47d596ce8c69673d5f0c9876a80cb5a6cbc964f3b31b2d44683c7c01b6634"},
- {file = "debugpy-1.6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:726e5cc0ed5bc63e821dc371d88ddae5cba85e2ad207bf5fefc808b29421cb4c"},
- {file = "debugpy-1.6.2-cp310-cp310-win32.whl", hash = "sha256:9809bd1cdc0026fab711e280e0cb5d8f89ae5f4f74701aba5bda9a20a6afb567"},
- {file = "debugpy-1.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:40741d4bbf59baca1e97a5123514afcc036423caae5f24db23a865c0b4167c34"},
- {file = "debugpy-1.6.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:67749e972213c395647a8798cc8377646e581e1fe97d0b1b7607e6b112ae4511"},
- {file = "debugpy-1.6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e3c43d650a1e5fa7110af380fb59061bcba1e7348c00237e7473c55ae499b96"},
- {file = "debugpy-1.6.2-cp37-cp37m-win32.whl", hash = "sha256:9e572c2ac3dd93f3f1a038a9226e7cc0d7326b8d345c9b9ce6fbf9cb9822e314"},
- {file = "debugpy-1.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ac5d9e625d291a041ff3eaf65bdb816eb79a5b204cf9f1ffaf9617c0eadf96fa"},
- {file = "debugpy-1.6.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:9f72435bc9a2026a35a41221beff853dd4b6b17567ba9b9d349ee9512eb71ce6"},
- {file = "debugpy-1.6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aaf579de5ecd02634d601d7cf5b6baae5f5bab89a55ef78e0904d766ef477729"},
- {file = "debugpy-1.6.2-cp38-cp38-win32.whl", hash = "sha256:0984086a670f46c75b5046b39a55f34e4120bee78928ac4c3c7f1c7b8be1d8be"},
- {file = "debugpy-1.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:19337bb8ff87da2535ac00ea3877ceaf40ff3c681421d1a96ab4d67dad031a16"},
- {file = "debugpy-1.6.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:163f282287ce68b00a51e9dcd7ad461ef288d740dcb3a2f22c01c62f31b62696"},
- {file = "debugpy-1.6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4909bb2f8e5c8fe33d6ec5b7764100b494289252ebe94ec7838b30467435f1cb"},
- {file = "debugpy-1.6.2-cp39-cp39-win32.whl", hash = "sha256:3b4657d3cd20aa454b62a70040524d3e785efc9a8488d16cd0e6caeb7b2a3f07"},
- {file = "debugpy-1.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:79d9ac34542b830a7954ab111ad8a4c790f1f836b895d03223aea4216b739208"},
- {file = "debugpy-1.6.2-py2.py3-none-any.whl", hash = "sha256:0bfdcf261f97a603d7ef7ab6972cdf7136201fde93d19bf3f917d0d2e43a5694"},
- {file = "debugpy-1.6.2.zip", hash = "sha256:e6047272e97a11aa6898138c1c88c8cf61838deeb2a4f0a74e63bb567f8dafc6"},
-]
-
-[[package]]
-name = "decorator"
-version = "5.1.1"
-description = "Decorators for Humans"
-optional = false
-python-versions = ">=3.5"
-files = [
- {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
- {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
-]
-
-[[package]]
-name = "defusedxml"
-version = "0.7.1"
-description = "XML bomb protection for Python stdlib modules"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-files = [
- {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"},
- {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"},
-]
-
-[[package]]
-name = "entrypoints"
-version = "0.4"
-description = "Discover and load entry points from installed packages."
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"},
- {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"},
-]
-
-[[package]]
-name = "executing"
-version = "0.9.1"
-description = "Get the currently executing AST node of a frame, and other information"
-optional = false
-python-versions = "*"
-files = [
- {file = "executing-0.9.1-py2.py3-none-any.whl", hash = "sha256:4ce4d6082d99361c0231fc31ac1a0f56979363cc6819de0b1410784f99e49105"},
- {file = "executing-0.9.1.tar.gz", hash = "sha256:ea278e2cf90cbbacd24f1080dd1f0ac25b71b2e21f50ab439b7ba45dd3195587"},
-]
-
-[[package]]
-name = "fastjsonschema"
-version = "2.16.1"
-description = "Fastest Python implementation of JSON schema"
-optional = false
-python-versions = "*"
-files = [
- {file = "fastjsonschema-2.16.1-py3-none-any.whl", hash = "sha256:2f7158c4de792555753d6c2277d6a2af2d406dfd97aeca21d17173561ede4fe6"},
- {file = "fastjsonschema-2.16.1.tar.gz", hash = "sha256:d6fa3ffbe719768d70e298b9fb847484e2bdfdb7241ed052b8d57a9294a8c334"},
-]
-
-[package.extras]
-devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"]
-
-[[package]]
-name = "fonttools"
-version = "4.34.4"
-description = "Tools to manipulate font files"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "fonttools-4.34.4-py3-none-any.whl", hash = "sha256:d73f25b283cd8033367451122aa868a23de0734757a01984e4b30b18b9050c72"},
- {file = "fonttools-4.34.4.zip", hash = "sha256:9a1c52488045cd6c6491fd07711a380f932466e317cb8e016fc4e99dc7eac2f0"},
-]
-
-[package.extras]
-all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=14.0.0)", "xattr", "zopfli (>=0.1.4)"]
-graphite = ["lz4 (>=1.7.4.2)"]
-interpolatable = ["munkres", "scipy"]
-lxml = ["lxml (>=4.0,<5)"]
-pathops = ["skia-pathops (>=0.5.0)"]
-plot = ["matplotlib"]
-repacker = ["uharfbuzz (>=0.23.0)"]
-symfont = ["sympy"]
-type1 = ["xattr"]
-ufo = ["fs (>=2.2.0,<3)"]
-unicode = ["unicodedata2 (>=14.0.0)"]
-woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"]
-
-[[package]]
-name = "frozenlist"
-version = "1.3.0"
-description = "A list-like structure which implements collections.abc.MutableSequence"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "frozenlist-1.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2257aaba9660f78c7b1d8fea963b68f3feffb1a9d5d05a18401ca9eb3e8d0a3"},
- {file = "frozenlist-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4a44ebbf601d7bac77976d429e9bdb5a4614f9f4027777f9e54fd765196e9d3b"},
- {file = "frozenlist-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:45334234ec30fc4ea677f43171b18a27505bfb2dba9aca4398a62692c0ea8868"},
- {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47be22dc27ed933d55ee55845d34a3e4e9f6fee93039e7f8ebadb0c2f60d403f"},
- {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03a7dd1bfce30216a3f51a84e6dd0e4a573d23ca50f0346634916ff105ba6e6b"},
- {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:691ddf6dc50480ce49f68441f1d16a4c3325887453837036e0fb94736eae1e58"},
- {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bde99812f237f79eaf3f04ebffd74f6718bbd216101b35ac7955c2d47c17da02"},
- {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a202458d1298ced3768f5a7d44301e7c86defac162ace0ab7434c2e961166e8"},
- {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9e3e9e365991f8cc5f5edc1fd65b58b41d0514a6a7ad95ef5c7f34eb49b3d3e"},
- {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:04cb491c4b1c051734d41ea2552fde292f5f3a9c911363f74f39c23659c4af78"},
- {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:436496321dad302b8b27ca955364a439ed1f0999311c393dccb243e451ff66aa"},
- {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:754728d65f1acc61e0f4df784456106e35afb7bf39cfe37227ab00436fb38676"},
- {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6eb275c6385dd72594758cbe96c07cdb9bd6becf84235f4a594bdf21e3596c9d"},
- {file = "frozenlist-1.3.0-cp310-cp310-win32.whl", hash = "sha256:e30b2f9683812eb30cf3f0a8e9f79f8d590a7999f731cf39f9105a7c4a39489d"},
- {file = "frozenlist-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f7353ba3367473d1d616ee727945f439e027f0bb16ac1a750219a8344d1d5d3c"},
- {file = "frozenlist-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88aafd445a233dbbf8a65a62bc3249a0acd0d81ab18f6feb461cc5a938610d24"},
- {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4406cfabef8f07b3b3af0f50f70938ec06d9f0fc26cbdeaab431cbc3ca3caeaa"},
- {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf829bd2e2956066dd4de43fd8ec881d87842a06708c035b37ef632930505a2"},
- {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:603b9091bd70fae7be28bdb8aa5c9990f4241aa33abb673390a7f7329296695f"},
- {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25af28b560e0c76fa41f550eacb389905633e7ac02d6eb3c09017fa1c8cdfde1"},
- {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c7a8a9fc9383b52c410a2ec952521906d355d18fccc927fca52ab575ee8b93"},
- {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:65bc6e2fece04e2145ab6e3c47428d1bbc05aede61ae365b2c1bddd94906e478"},
- {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3f7c935c7b58b0d78c0beea0c7358e165f95f1fd8a7e98baa40d22a05b4a8141"},
- {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd89acd1b8bb4f31b47072615d72e7f53a948d302b7c1d1455e42622de180eae"},
- {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:6983a31698490825171be44ffbafeaa930ddf590d3f051e397143a5045513b01"},
- {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:adac9700675cf99e3615eb6a0eb5e9f5a4143c7d42c05cea2e7f71c27a3d0846"},
- {file = "frozenlist-1.3.0-cp37-cp37m-win32.whl", hash = "sha256:0c36e78b9509e97042ef869c0e1e6ef6429e55817c12d78245eb915e1cca7468"},
- {file = "frozenlist-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:57f4d3f03a18facacb2a6bcd21bccd011e3b75d463dc49f838fd699d074fabd1"},
- {file = "frozenlist-1.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8c905a5186d77111f02144fab5b849ab524f1e876a1e75205cd1386a9be4b00a"},
- {file = "frozenlist-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b5009062d78a8c6890d50b4e53b0ddda31841b3935c1937e2ed8c1bda1c7fb9d"},
- {file = "frozenlist-1.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2fdc3cd845e5a1f71a0c3518528bfdbfe2efaf9886d6f49eacc5ee4fd9a10953"},
- {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e650bd09b5dda929523b9f8e7f99b24deac61240ecc1a32aeba487afcd970f"},
- {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:40dff8962b8eba91fd3848d857203f0bd704b5f1fa2b3fc9af64901a190bba08"},
- {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:768efd082074bb203c934e83a61654ed4931ef02412c2fbdecea0cff7ecd0274"},
- {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:006d3595e7d4108a12025ddf415ae0f6c9e736e726a5db0183326fd191b14c5e"},
- {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:871d42623ae15eb0b0e9df65baeee6976b2e161d0ba93155411d58ff27483ad8"},
- {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aff388be97ef2677ae185e72dc500d19ecaf31b698986800d3fc4f399a5e30a5"},
- {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9f892d6a94ec5c7b785e548e42722e6f3a52f5f32a8461e82ac3e67a3bd073f1"},
- {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:e982878792c971cbd60ee510c4ee5bf089a8246226dea1f2138aa0bb67aff148"},
- {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c6c321dd013e8fc20735b92cb4892c115f5cdb82c817b1e5b07f6b95d952b2f0"},
- {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:30530930410855c451bea83f7b272fb1c495ed9d5cc72895ac29e91279401db3"},
- {file = "frozenlist-1.3.0-cp38-cp38-win32.whl", hash = "sha256:40ec383bc194accba825fbb7d0ef3dda5736ceab2375462f1d8672d9f6b68d07"},
- {file = "frozenlist-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:f20baa05eaa2bcd5404c445ec51aed1c268d62600362dc6cfe04fae34a424bd9"},
- {file = "frozenlist-1.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0437fe763fb5d4adad1756050cbf855bbb2bf0d9385c7bb13d7a10b0dd550486"},
- {file = "frozenlist-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b684c68077b84522b5c7eafc1dc735bfa5b341fb011d5552ebe0968e22ed641c"},
- {file = "frozenlist-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93641a51f89473837333b2f8100f3f89795295b858cd4c7d4a1f18e299dc0a4f"},
- {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6d32ff213aef0fd0bcf803bffe15cfa2d4fde237d1d4838e62aec242a8362fa"},
- {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31977f84828b5bb856ca1eb07bf7e3a34f33a5cddce981d880240ba06639b94d"},
- {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c62964192a1c0c30b49f403495911298810bada64e4f03249ca35a33ca0417a"},
- {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4eda49bea3602812518765810af732229b4291d2695ed24a0a20e098c45a707b"},
- {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acb267b09a509c1df5a4ca04140da96016f40d2ed183cdc356d237286c971b51"},
- {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e1e26ac0a253a2907d654a37e390904426d5ae5483150ce3adedb35c8c06614a"},
- {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f96293d6f982c58ebebb428c50163d010c2f05de0cde99fd681bfdc18d4b2dc2"},
- {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e84cb61b0ac40a0c3e0e8b79c575161c5300d1d89e13c0e02f76193982f066ed"},
- {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:ff9310f05b9d9c5c4dd472983dc956901ee6cb2c3ec1ab116ecdde25f3ce4951"},
- {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d26b650b71fdc88065b7a21f8ace70175bcf3b5bdba5ea22df4bfd893e795a3b"},
- {file = "frozenlist-1.3.0-cp39-cp39-win32.whl", hash = "sha256:01a73627448b1f2145bddb6e6c2259988bb8aee0fb361776ff8604b99616cd08"},
- {file = "frozenlist-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:772965f773757a6026dea111a15e6e2678fbd6216180f82a48a40b27de1ee2ab"},
- {file = "frozenlist-1.3.0.tar.gz", hash = "sha256:ce6f2ba0edb7b0c1d8976565298ad2deba6f8064d2bebb6ffce2ca896eb35b0b"},
-]
-
-[[package]]
-name = "fsspec"
-version = "2022.7.1"
-description = "File-system specification"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "fsspec-2022.7.1-py3-none-any.whl", hash = "sha256:36c5a8e7c4fc20cf32ef6934ac0a122accc8a593ddc8478d30c3ca4dbbd95500"},
- {file = "fsspec-2022.7.1.tar.gz", hash = "sha256:7f9fb19d811b027b97c4636c6073eb53bc4cbee2d3c4b33fa88b9f26906fd7d7"},
-]
-
-[package.extras]
-abfs = ["adlfs"]
-adl = ["adlfs"]
-arrow = ["pyarrow (>=1)"]
-dask = ["dask", "distributed"]
-dropbox = ["dropbox", "dropboxdrivefs", "requests"]
-entrypoints = ["importlib-metadata"]
-fuse = ["fusepy"]
-gcs = ["gcsfs"]
-git = ["pygit2"]
-github = ["requests"]
-gs = ["gcsfs"]
-gui = ["panel"]
-hdfs = ["pyarrow (>=1)"]
-http = ["aiohttp", "requests"]
-libarchive = ["libarchive-c"]
-oci = ["ocifs"]
-s3 = ["s3fs"]
-sftp = ["paramiko"]
-smb = ["smbprotocol"]
-ssh = ["paramiko"]
-tqdm = ["tqdm"]
-
-[[package]]
-name = "idna"
-version = "3.3"
-description = "Internationalized Domain Names in Applications (IDNA)"
-optional = false
-python-versions = ">=3.5"
-files = [
- {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
- {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
-]
-
-[[package]]
-name = "importlib-resources"
-version = "5.9.0"
-description = "Read resources from Python packages"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "importlib_resources-5.9.0-py3-none-any.whl", hash = "sha256:f78a8df21a79bcc30cfd400bdc38f314333de7c0fb619763f6b9dabab8268bb7"},
- {file = "importlib_resources-5.9.0.tar.gz", hash = "sha256:5481e97fb45af8dcf2f798952625591c58fe599d0735d86b10f54de086a61681"},
-]
-
-[package.dependencies]
-zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
-
-[package.extras]
-docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"]
-testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"]
-
-[[package]]
-name = "ipykernel"
-version = "6.15.1"
-description = "IPython Kernel for Jupyter"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "ipykernel-6.15.1-py3-none-any.whl", hash = "sha256:d8969c5b23b0e453a23166da5a669c954db399789293fcb03fec5cb25367e43c"},
- {file = "ipykernel-6.15.1.tar.gz", hash = "sha256:37acc3254caa8a0dafcddddc8dc863a60ad1b46487b68aee361d9a15bda98112"},
-]
-
-[package.dependencies]
-appnope = {version = "*", markers = "platform_system == \"Darwin\""}
-debugpy = ">=1.0"
-ipython = ">=7.23.1"
-jupyter-client = ">=6.1.12"
-matplotlib-inline = ">=0.1"
-nest-asyncio = "*"
-packaging = "*"
-psutil = "*"
-pyzmq = ">=17"
-tornado = ">=6.1"
-traitlets = ">=5.1.0"
-
-[package.extras]
-test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=6.0)", "pytest-cov", "pytest-timeout"]
-
-[[package]]
-name = "ipython"
-version = "8.4.0"
-description = "IPython: Productive Interactive Computing"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "ipython-8.4.0-py3-none-any.whl", hash = "sha256:7ca74052a38fa25fe9bedf52da0be7d3fdd2fb027c3b778ea78dfe8c212937d1"},
- {file = "ipython-8.4.0.tar.gz", hash = "sha256:f2db3a10254241d9b447232cec8b424847f338d9d36f9a577a6192c332a46abd"},
-]
-
-[package.dependencies]
-appnope = {version = "*", markers = "sys_platform == \"darwin\""}
-backcall = "*"
-colorama = {version = "*", markers = "sys_platform == \"win32\""}
-decorator = "*"
-jedi = ">=0.16"
-matplotlib-inline = "*"
-pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""}
-pickleshare = "*"
-prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0"
-pygments = ">=2.4.0"
-setuptools = ">=18.5"
-stack-data = "*"
-traitlets = ">=5"
-
-[package.extras]
-all = ["Sphinx (>=1.3)", "black", "curio", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.19)", "pandas", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "testpath", "trio"]
-black = ["black"]
-doc = ["Sphinx (>=1.3)"]
-kernel = ["ipykernel"]
-nbconvert = ["nbconvert"]
-nbformat = ["nbformat"]
-notebook = ["ipywidgets", "notebook"]
-parallel = ["ipyparallel"]
-qtconsole = ["qtconsole"]
-test = ["pytest (<7.1)", "pytest-asyncio", "testpath"]
-test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.19)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"]
-
-[[package]]
-name = "ipython-genutils"
-version = "0.2.0"
-description = "Vestigial utilities from IPython"
-optional = false
-python-versions = "*"
-files = [
- {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"},
- {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"},
-]
-
-[[package]]
-name = "ipywidgets"
-version = "7.7.1"
-description = "IPython HTML widgets for Jupyter"
-optional = false
-python-versions = "*"
-files = [
- {file = "ipywidgets-7.7.1-py2.py3-none-any.whl", hash = "sha256:aa1076ab7102b2486ae2607c43c243200a07c17d6093676c419d4b6762489a50"},
- {file = "ipywidgets-7.7.1.tar.gz", hash = "sha256:5f2fa1b7afae1af32c88088c9828ad978de93ddda393d7ed414e553fee93dcab"},
-]
-
-[package.dependencies]
-ipykernel = ">=4.5.1"
-ipython = {version = ">=4.0.0", markers = "python_version >= \"3.3\""}
-ipython-genutils = ">=0.2.0,<0.3.0"
-jupyterlab-widgets = {version = ">=1.0.0", markers = "python_version >= \"3.6\""}
-traitlets = ">=4.3.1"
-widgetsnbextension = ">=3.6.0,<3.7.0"
-
-[package.extras]
-test = ["mock", "pytest (>=3.6.0)", "pytest-cov"]
-
-[[package]]
-name = "jedi"
-version = "0.18.1"
-description = "An autocompletion tool for Python that can be used for text editors."
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"},
- {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"},
-]
-
-[package.dependencies]
-parso = ">=0.8.0,<0.9.0"
-
-[package.extras]
-qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
-testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"]
-
-[[package]]
-name = "jinja2"
-version = "3.1.2"
-description = "A very fast and expressive template engine."
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"},
- {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"},
-]
-
-[package.dependencies]
-MarkupSafe = ">=2.0"
-
-[package.extras]
-i18n = ["Babel (>=2.7)"]
-
-[[package]]
-name = "jmespath"
-version = "1.0.1"
-description = "JSON Matching Expressions"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"},
- {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"},
-]
-
-[[package]]
-name = "jsonschema"
-version = "4.9.0"
-description = "An implementation of JSON Schema validation for Python"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "jsonschema-4.9.0-py3-none-any.whl", hash = "sha256:5d0be0cd1b670438b71c3d3145b2abba1f9d197e3e91adc4c4bae4c0e114e252"},
- {file = "jsonschema-4.9.0.tar.gz", hash = "sha256:df10e65c8f3687a48e93d0d348ce0ce5f897b5a28e9bbcbbe8f7c7eaf019e850"},
-]
-
-[package.dependencies]
-attrs = ">=17.4.0"
-importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
-pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""}
-pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
-
-[package.extras]
-format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
-format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
-
-[[package]]
-name = "jupyter"
-version = "1.0.0"
-description = "Jupyter metapackage. Install all the Jupyter components in one go."
-optional = false
-python-versions = "*"
-files = [
- {file = "jupyter-1.0.0-py2.py3-none-any.whl", hash = "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78"},
- {file = "jupyter-1.0.0.tar.gz", hash = "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f"},
- {file = "jupyter-1.0.0.zip", hash = "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7"},
-]
-
-[package.dependencies]
-ipykernel = "*"
-ipywidgets = "*"
-jupyter-console = "*"
-nbconvert = "*"
-notebook = "*"
-qtconsole = "*"
-
-[[package]]
-name = "jupyter-client"
-version = "7.3.4"
-description = "Jupyter protocol implementation and client libraries"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "jupyter_client-7.3.4-py3-none-any.whl", hash = "sha256:17d74b0d0a7b24f1c8c527b24fcf4607c56bee542ffe8e3418e50b21e514b621"},
- {file = "jupyter_client-7.3.4.tar.gz", hash = "sha256:aa9a6c32054b290374f95f73bb0cae91455c58dfb84f65c8591912b8f65e6d56"},
-]
-
-[package.dependencies]
-entrypoints = "*"
-jupyter-core = ">=4.9.2"
-nest-asyncio = ">=1.5.4"
-python-dateutil = ">=2.8.2"
-pyzmq = ">=23.0"
-tornado = ">=6.0"
-traitlets = "*"
-
-[package.extras]
-doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"]
-test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"]
-
-[[package]]
-name = "jupyter-console"
-version = "6.4.4"
-description = "Jupyter terminal console"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "jupyter_console-6.4.4-py3-none-any.whl", hash = "sha256:756df7f4f60c986e7bc0172e4493d3830a7e6e75c08750bbe59c0a5403ad6dee"},
- {file = "jupyter_console-6.4.4.tar.gz", hash = "sha256:172f5335e31d600df61613a97b7f0352f2c8250bbd1092ef2d658f77249f89fb"},
-]
-
-[package.dependencies]
-ipykernel = "*"
-ipython = "*"
-jupyter-client = ">=7.0.0"
-prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0"
-pygments = "*"
-
-[package.extras]
-test = ["pexpect"]
-
-[[package]]
-name = "jupyter-core"
-version = "4.11.1"
-description = "Jupyter core package. A base package on which Jupyter projects rely."
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "jupyter_core-4.11.1-py3-none-any.whl", hash = "sha256:715e22bb6cc7db3718fddfac1f69f1c7e899ca00e42bdfd4bf3705452b9fd84a"},
- {file = "jupyter_core-4.11.1.tar.gz", hash = "sha256:2e5f244d44894c4154d06aeae3419dd7f1b0ef4494dc5584929b398c61cfd314"},
-]
-
-[package.dependencies]
-pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""}
-traitlets = "*"
-
-[package.extras]
-test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"]
-
-[[package]]
-name = "jupyterlab-pygments"
-version = "0.2.2"
-description = "Pygments theme using JupyterLab CSS variables"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"},
- {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"},
-]
-
-[[package]]
-name = "jupyterlab-widgets"
-version = "1.1.1"
-description = "A JupyterLab extension."
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "jupyterlab_widgets-1.1.1-py3-none-any.whl", hash = "sha256:90ab47d99da03a3697074acb23b2975ead1d6171aa41cb2812041a7f2a08177a"},
- {file = "jupyterlab_widgets-1.1.1.tar.gz", hash = "sha256:67d0ef1e407e0c42c8ab60b9d901cd7a4c68923650763f75bf17fb06c1943b79"},
-]
-
-[[package]]
-name = "kiwisolver"
-version = "1.4.4"
-description = "A fast implementation of the Cassowary constraint solver"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"},
- {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c"},
- {file = "kiwisolver-1.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c79ebe8f3676a4c6630fd3f777f3cfecf9289666c84e775a67d1d358578dc2e3"},
- {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbe9fa13da955feb8202e215c4018f4bb57469b1b78c7a4c5c7b93001699938"},
- {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7577c1987baa3adc4b3c62c33bd1118c3ef5c8ddef36f0f2c950ae0b199e100d"},
- {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09"},
- {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed58b8acf29798b036d347791141767ccf65eee7f26bde03a71c944449e53de"},
- {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32"},
- {file = "kiwisolver-1.4.4-cp310-cp310-win32.whl", hash = "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408"},
- {file = "kiwisolver-1.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004"},
- {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ea21f66820452a3f5d1655f8704a60d66ba1191359b96541eaf457710a5fc6"},
- {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bc9db8a3efb3e403e4ecc6cd9489ea2bac94244f80c78e27c31dcc00d2790ac2"},
- {file = "kiwisolver-1.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5b61785a9ce44e5a4b880272baa7cf6c8f48a5180c3e81c59553ba0cb0821ca"},
- {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2dbb44c3f7e6c4d3487b31037b1bdbf424d97687c1747ce4ff2895795c9bf69"},
- {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295ecd49304dcf3bfbfa45d9a081c96509e95f4b9d0eb7ee4ec0530c4a96514"},
- {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bd472dbe5e136f96a4b18f295d159d7f26fd399136f5b17b08c4e5f498cd494"},
- {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf7d9fce9bcc4752ca4a1b80aabd38f6d19009ea5cbda0e0856983cf6d0023f5"},
- {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d6601aed50c74e0ef02f4204da1816147a6d3fbdc8b3872d263338a9052c51"},
- {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:877272cf6b4b7e94c9614f9b10140e198d2186363728ed0f701c6eee1baec1da"},
- {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:db608a6757adabb32f1cfe6066e39b3706d8c3aa69bbc353a5b61edad36a5cb4"},
- {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5853eb494c71e267912275e5586fe281444eb5e722de4e131cddf9d442615626"},
- {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f0a1dbdb5ecbef0d34eb77e56fcb3e95bbd7e50835d9782a45df81cc46949750"},
- {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:283dffbf061a4ec60391d51e6155e372a1f7a4f5b15d59c8505339454f8989e4"},
- {file = "kiwisolver-1.4.4-cp311-cp311-win32.whl", hash = "sha256:d06adcfa62a4431d404c31216f0f8ac97397d799cd53800e9d3efc2fbb3cf14e"},
- {file = "kiwisolver-1.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e7da3fec7408813a7cebc9e4ec55afed2d0fd65c4754bc376bf03498d4e92686"},
- {file = "kiwisolver-1.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6"},
- {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf"},
- {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b"},
- {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0611a0a2a518464c05ddd5a3a1a0e856ccc10e67079bb17f265ad19ab3c7597"},
- {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db5283d90da4174865d520e7366801a93777201e91e79bacbac6e6927cbceede"},
- {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1041feb4cda8708ce73bb4dcb9ce1ccf49d553bf87c3954bdfa46f0c3f77252c"},
- {file = "kiwisolver-1.4.4-cp37-cp37m-win32.whl", hash = "sha256:a553dadda40fef6bfa1456dc4be49b113aa92c2a9a9e8711e955618cd69622e3"},
- {file = "kiwisolver-1.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:03baab2d6b4a54ddbb43bba1a3a2d1627e82d205c5cf8f4c924dc49284b87166"},
- {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:841293b17ad704d70c578f1f0013c890e219952169ce8a24ebc063eecf775454"},
- {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4f270de01dd3e129a72efad823da90cc4d6aafb64c410c9033aba70db9f1ff0"},
- {file = "kiwisolver-1.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c"},
- {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97528e64cb9ebeff9701e7938653a9951922f2a38bd847787d4a8e498cc83ae"},
- {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d1573129aa0fd901076e2bfb4275a35f5b7aa60fbfb984499d661ec950320b0"},
- {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad881edc7ccb9d65b0224f4e4d05a1e85cf62d73aab798943df6d48ab0cd79a1"},
- {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b428ef021242344340460fa4c9185d0b1f66fbdbfecc6c63eff4b7c29fad429d"},
- {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e407cb4bd5a13984a6c2c0fe1845e4e41e96f183e5e5cd4d77a857d9693494c"},
- {file = "kiwisolver-1.4.4-cp38-cp38-win32.whl", hash = "sha256:75facbe9606748f43428fc91a43edb46c7ff68889b91fa31f53b58894503a191"},
- {file = "kiwisolver-1.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:5bce61af018b0cb2055e0e72e7d65290d822d3feee430b7b8203d8a855e78766"},
- {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8c808594c88a025d4e322d5bb549282c93c8e1ba71b790f539567932722d7bd8"},
- {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0a71d85ecdd570ded8ac3d1c0f480842f49a40beb423bb8014539a9f32a5897"},
- {file = "kiwisolver-1.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b533558eae785e33e8c148a8d9921692a9fe5aa516efbdff8606e7d87b9d5824"},
- {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:efda5fc8cc1c61e4f639b8067d118e742b812c930f708e6667a5ce0d13499e29"},
- {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c43e1e1206cd421cd92e6b3280d4385d41d7166b3ed577ac20444b6995a445f"},
- {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8d3bd6c72b2dd9decf16ce70e20abcb3274ba01b4e1c96031e0c4067d1e7cd"},
- {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ea39b0ccc4f5d803e3337dd46bcce60b702be4d86fd0b3d7531ef10fd99a1ac"},
- {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968f44fdbf6dd757d12920d63b566eeb4d5b395fd2d00d29d7ef00a00582aac9"},
- {file = "kiwisolver-1.4.4-cp39-cp39-win32.whl", hash = "sha256:da7e547706e69e45d95e116e6939488d62174e033b763ab1496b4c29b76fabea"},
- {file = "kiwisolver-1.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:ba59c92039ec0a66103b1d5fe588fa546373587a7d68f5c96f743c3396afc04b"},
- {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:91672bacaa030f92fc2f43b620d7b337fd9a5af28b0d6ed3f77afc43c4a64b5a"},
- {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d"},
- {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a"},
- {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871"},
- {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28bc5b299f48150b5f822ce68624e445040595a4ac3d59251703779836eceff9"},
- {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:81e38381b782cc7e1e46c4e14cd997ee6040768101aefc8fa3c24a4cc58e98f8"},
- {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2a66fdfb34e05b705620dd567f5a03f239a088d5a3f321e7b6ac3239d22aa286"},
- {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872b8ca05c40d309ed13eb2e582cab0c5a05e81e987ab9c521bf05ad1d5cf5cb"},
- {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f"},
- {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9f85003f5dfa867e86d53fac6f7e6f30c045673fa27b603c397753bebadc3008"},
- {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e307eb9bd99801f82789b44bb45e9f541961831c7311521b13a6c85afc09767"},
- {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1792d939ec70abe76f5054d3f36ed5656021dcad1322d1cc996d4e54165cef9"},
- {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cb459eea32a4e2cf18ba5fcece2dbdf496384413bc1bae15583f19e567f3b2"},
- {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"},
- {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"},
-]
-
-[[package]]
-name = "markupsafe"
-version = "2.1.1"
-description = "Safely add untrusted strings to HTML/XML markup."
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"},
- {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"},
- {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"},
- {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"},
- {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"},
- {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"},
- {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"},
- {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"},
- {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"},
- {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"},
- {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"},
- {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"},
- {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"},
- {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"},
- {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"},
- {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"},
- {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"},
- {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"},
- {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"},
- {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"},
- {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"},
- {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"},
- {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"},
- {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"},
- {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"},
- {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"},
- {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"},
- {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"},
- {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"},
- {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"},
- {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"},
- {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"},
- {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"},
- {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"},
- {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"},
- {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"},
- {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"},
- {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"},
- {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"},
- {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"},
-]
-
-[[package]]
-name = "matplotlib"
-version = "3.5.2"
-description = "Python plotting package"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "matplotlib-3.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:03bbb3f5f78836855e127b5dab228d99551ad0642918ccbf3067fcd52ac7ac5e"},
- {file = "matplotlib-3.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49a5938ed6ef9dda560f26ea930a2baae11ea99e1c2080c8714341ecfda72a89"},
- {file = "matplotlib-3.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:77157be0fc4469cbfb901270c205e7d8adb3607af23cef8bd11419600647ceed"},
- {file = "matplotlib-3.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5844cea45d804174bf0fac219b4ab50774e504bef477fc10f8f730ce2d623441"},
- {file = "matplotlib-3.5.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c87973ddec10812bddc6c286b88fdd654a666080fbe846a1f7a3b4ba7b11ab78"},
- {file = "matplotlib-3.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a05f2b37222319753a5d43c0a4fd97ed4ff15ab502113e3f2625c26728040cf"},
- {file = "matplotlib-3.5.2-cp310-cp310-win32.whl", hash = "sha256:9776e1a10636ee5f06ca8efe0122c6de57ffe7e8c843e0fb6e001e9d9256ec95"},
- {file = "matplotlib-3.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:b4fedaa5a9aa9ce14001541812849ed1713112651295fdddd640ea6620e6cf98"},
- {file = "matplotlib-3.5.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ee175a571e692fc8ae8e41ac353c0e07259113f4cb063b0ec769eff9717e84bb"},
- {file = "matplotlib-3.5.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e8bda1088b941ead50caabd682601bece983cadb2283cafff56e8fcddbf7d7f"},
- {file = "matplotlib-3.5.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9480842d5aadb6e754f0b8f4ebeb73065ac8be1855baa93cd082e46e770591e9"},
- {file = "matplotlib-3.5.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6c623b355d605a81c661546af7f24414165a8a2022cddbe7380a31a4170fa2e9"},
- {file = "matplotlib-3.5.2-cp37-cp37m-win32.whl", hash = "sha256:a91426ae910819383d337ba0dc7971c7cefdaa38599868476d94389a329e599b"},
- {file = "matplotlib-3.5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c4b82c2ae6d305fcbeb0eb9c93df2602ebd2f174f6e8c8a5d92f9445baa0c1d3"},
- {file = "matplotlib-3.5.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ebc27ad11df3c1661f4677a7762e57a8a91dd41b466c3605e90717c9a5f90c82"},
- {file = "matplotlib-3.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a32ea6e12e80dedaca2d4795d9ed40f97bfa56e6011e14f31502fdd528b9c89"},
- {file = "matplotlib-3.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a0967d4156adbd0d46db06bc1a877f0370bce28d10206a5071f9ecd6dc60b79"},
- {file = "matplotlib-3.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2b696699386766ef171a259d72b203a3c75d99d03ec383b97fc2054f52e15cf"},
- {file = "matplotlib-3.5.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f409716119fa39b03da3d9602bd9b41142fab7a0568758cd136cd80b1bf36c8"},
- {file = "matplotlib-3.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b8d3f4e71e26307e8c120b72c16671d70c5cd08ae412355c11254aa8254fb87f"},
- {file = "matplotlib-3.5.2-cp38-cp38-win32.whl", hash = "sha256:b6c63cd01cad0ea8704f1fd586e9dc5777ccedcd42f63cbbaa3eae8dd41172a1"},
- {file = "matplotlib-3.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:75c406c527a3aa07638689586343f4b344fcc7ab1f79c396699eb550cd2b91f7"},
- {file = "matplotlib-3.5.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4a44cdfdb9d1b2f18b1e7d315eb3843abb097869cd1ef89cfce6a488cd1b5182"},
- {file = "matplotlib-3.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3d8e129af95b156b41cb3be0d9a7512cc6d73e2b2109f82108f566dbabdbf377"},
- {file = "matplotlib-3.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:364e6bca34edc10a96aa3b1d7cd76eb2eea19a4097198c1b19e89bee47ed5781"},
- {file = "matplotlib-3.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea75df8e567743207e2b479ba3d8843537be1c146d4b1e3e395319a4e1a77fe9"},
- {file = "matplotlib-3.5.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:44c6436868186564450df8fd2fc20ed9daaef5caad699aa04069e87099f9b5a8"},
- {file = "matplotlib-3.5.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d7705022df2c42bb02937a2a824f4ec3cca915700dd80dc23916af47ff05f1a"},
- {file = "matplotlib-3.5.2-cp39-cp39-win32.whl", hash = "sha256:ee0b8e586ac07f83bb2950717e66cb305e2859baf6f00a9c39cc576e0ce9629c"},
- {file = "matplotlib-3.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:c772264631e5ae61f0bd41313bbe48e1b9bcc95b974033e1118c9caa1a84d5c6"},
- {file = "matplotlib-3.5.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:751d3815b555dcd6187ad35b21736dc12ce6925fc3fa363bbc6dc0f86f16484f"},
- {file = "matplotlib-3.5.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:31fbc2af27ebb820763f077ec7adc79b5a031c2f3f7af446bd7909674cd59460"},
- {file = "matplotlib-3.5.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4fa28ca76ac5c2b2d54bc058b3dad8e22ee85d26d1ee1b116a6fd4d2277b6a04"},
- {file = "matplotlib-3.5.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:24173c23d1bcbaed5bf47b8785d27933a1ac26a5d772200a0f3e0e38f471b001"},
- {file = "matplotlib-3.5.2.tar.gz", hash = "sha256:48cf850ce14fa18067f2d9e0d646763681948487a8080ec0af2686468b4607a2"},
-]
-
-[package.dependencies]
-cycler = ">=0.10"
-fonttools = ">=4.22.0"
-kiwisolver = ">=1.0.1"
-numpy = ">=1.17"
-packaging = ">=20.0"
-pillow = ">=6.2.0"
-pyparsing = ">=2.2.1"
-python-dateutil = ">=2.7"
-
-[[package]]
-name = "matplotlib-inline"
-version = "0.1.3"
-description = "Inline Matplotlib backend for Jupyter"
-optional = false
-python-versions = ">=3.5"
-files = [
- {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"},
- {file = "matplotlib_inline-0.1.3-py3-none-any.whl", hash = "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"},
-]
-
-[package.dependencies]
-traitlets = "*"
-
-[[package]]
-name = "mistune"
-version = "0.8.4"
-description = "The fastest markdown parser in pure Python"
-optional = false
-python-versions = "*"
-files = [
- {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"},
- {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"},
-]
-
-[[package]]
-name = "multidict"
-version = "6.0.2"
-description = "multidict implementation"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"},
- {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"},
- {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"},
- {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"},
- {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"},
- {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"},
- {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"},
- {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"},
- {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"},
- {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"},
- {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"},
- {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"},
- {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"},
- {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"},
- {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"},
- {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"},
- {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"},
- {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"},
- {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"},
- {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"},
- {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"},
- {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"},
- {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"},
- {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"},
- {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"},
- {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"},
- {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"},
- {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"},
- {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"},
- {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"},
- {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"},
- {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"},
- {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"},
- {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"},
- {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"},
- {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"},
- {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"},
- {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"},
- {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"},
- {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"},
- {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"},
- {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"},
- {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"},
- {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"},
- {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"},
- {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"},
- {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"},
- {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"},
- {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"},
- {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"},
- {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"},
- {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"},
- {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"},
- {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"},
- {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"},
- {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"},
- {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"},
- {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"},
- {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"},
-]
-
-[[package]]
-name = "nbclient"
-version = "0.6.6"
-description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor."
-optional = false
-python-versions = ">=3.7.0"
-files = [
- {file = "nbclient-0.6.6-py3-none-any.whl", hash = "sha256:09bae4ea2df79fa6bc50aeb8278d8b79d2036792824337fa6eee834afae17312"},
- {file = "nbclient-0.6.6.tar.gz", hash = "sha256:0df76a7961d99a681b4796c74a1f2553b9f998851acc01896dce064ad19a9027"},
-]
-
-[package.dependencies]
-jupyter-client = ">=6.1.5"
-nbformat = ">=5.0"
-nest-asyncio = "*"
-traitlets = ">=5.2.2"
-
-[package.extras]
-sphinx = ["Sphinx (>=1.7)", "autodoc-traits", "mock", "moto", "myst-parser", "sphinx-book-theme"]
-test = ["black", "check-manifest", "flake8", "ipykernel", "ipython (<8.0.0)", "ipywidgets (<8.0.0)", "mypy", "pip (>=18.1)", "pre-commit", "pytest (>=4.1)", "pytest-asyncio", "pytest-cov (>=2.6.1)", "setuptools (>=60.0)", "testpath", "twine (>=1.11.0)", "xmltodict"]
-
-[[package]]
-name = "nbconvert"
-version = "6.5.0"
-description = "Converting Jupyter Notebooks"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "nbconvert-6.5.0-py3-none-any.whl", hash = "sha256:c56dd0b8978a1811a5654f74c727ff16ca87dd5a43abd435a1c49b840fcd8360"},
- {file = "nbconvert-6.5.0.tar.gz", hash = "sha256:223e46e27abe8596b8aed54301fadbba433b7ffea8196a68fd7b1ff509eee99d"},
-]
-
-[package.dependencies]
-beautifulsoup4 = "*"
-bleach = "*"
-defusedxml = "*"
-entrypoints = ">=0.2.2"
-jinja2 = ">=3.0"
-jupyter-core = ">=4.7"
-jupyterlab-pygments = "*"
-MarkupSafe = ">=2.0"
-mistune = ">=0.8.1,<2"
-nbclient = ">=0.5.0"
-nbformat = ">=5.1"
-packaging = "*"
-pandocfilters = ">=1.4.1"
-pygments = ">=2.4.1"
-tinycss2 = "*"
-traitlets = ">=5.0"
-
-[package.extras]
-all = ["ipykernel", "ipython", "ipywidgets (>=7)", "nbsphinx (>=0.2.12)", "pre-commit", "pyppeteer (>=1,<1.1)", "pytest", "pytest-cov", "pytest-dependency", "sphinx (>=1.5.1)", "sphinx-rtd-theme", "tornado (>=6.1)"]
-docs = ["ipython", "nbsphinx (>=0.2.12)", "sphinx (>=1.5.1)", "sphinx-rtd-theme"]
-serve = ["tornado (>=6.1)"]
-test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pyppeteer (>=1,<1.1)", "pytest", "pytest-cov", "pytest-dependency"]
-webpdf = ["pyppeteer (>=1,<1.1)"]
-
-[[package]]
-name = "nbformat"
-version = "5.4.0"
-description = "The Jupyter Notebook format"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "nbformat-5.4.0-py3-none-any.whl", hash = "sha256:0d6072aaec95dddc39735c144ee8bbc6589c383fb462e4058abc855348152dad"},
- {file = "nbformat-5.4.0.tar.gz", hash = "sha256:44ba5ca6acb80c5d5a500f1e5b83ede8cbe364d5a495c4c8cf60aaf1ba656501"},
-]
-
-[package.dependencies]
-fastjsonschema = "*"
-jsonschema = ">=2.6"
-jupyter-core = "*"
-traitlets = ">=5.1"
-
-[package.extras]
-test = ["check-manifest", "pre-commit", "pytest", "testpath"]
-
-[[package]]
-name = "nest-asyncio"
-version = "1.5.5"
-description = "Patch asyncio to allow nested event loops"
-optional = false
-python-versions = ">=3.5"
-files = [
- {file = "nest_asyncio-1.5.5-py3-none-any.whl", hash = "sha256:b98e3ec1b246135e4642eceffa5a6c23a3ab12c82ff816a92c612d68205813b2"},
- {file = "nest_asyncio-1.5.5.tar.gz", hash = "sha256:e442291cd942698be619823a17a86a5759eabe1f8613084790de189fe9e16d65"},
-]
-
-[[package]]
-name = "notebook"
-version = "6.4.12"
-description = "A web-based notebook environment for interactive computing"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "notebook-6.4.12-py3-none-any.whl", hash = "sha256:8c07a3bb7640e371f8a609bdbb2366a1976c6a2589da8ef917f761a61e3ad8b1"},
- {file = "notebook-6.4.12.tar.gz", hash = "sha256:6268c9ec9048cff7a45405c990c29ac9ca40b0bc3ec29263d218c5e01f2b4e86"},
-]
-
-[package.dependencies]
-argon2-cffi = "*"
-ipykernel = "*"
-ipython-genutils = "*"
-jinja2 = "*"
-jupyter-client = ">=5.3.4"
-jupyter-core = ">=4.6.1"
-nbconvert = ">=5"
-nbformat = "*"
-nest-asyncio = ">=1.5"
-prometheus-client = "*"
-pyzmq = ">=17"
-Send2Trash = ">=1.8.0"
-terminado = ">=0.8.3"
-tornado = ">=6.1"
-traitlets = ">=4.2.1"
-
-[package.extras]
-docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"]
-json-logging = ["json-logging"]
-test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium", "testpath"]
-
-[[package]]
-name = "numpy"
-version = "1.23.1"
-description = "NumPy is the fundamental package for array computing with Python."
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "numpy-1.23.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b15c3f1ed08df4980e02cc79ee058b788a3d0bef2fb3c9ca90bb8cbd5b8a3a04"},
- {file = "numpy-1.23.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ce242162015b7e88092dccd0e854548c0926b75c7924a3495e02c6067aba1f5"},
- {file = "numpy-1.23.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0d7447679ae9a7124385ccf0ea990bb85bb869cef217e2ea6c844b6a6855073"},
- {file = "numpy-1.23.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3119daed207e9410eaf57dcf9591fdc68045f60483d94956bee0bfdcba790953"},
- {file = "numpy-1.23.1-cp310-cp310-win32.whl", hash = "sha256:3ab67966c8d45d55a2bdf40701536af6443763907086c0a6d1232688e27e5447"},
- {file = "numpy-1.23.1-cp310-cp310-win_amd64.whl", hash = "sha256:1865fdf51446839ca3fffaab172461f2b781163f6f395f1aed256b1ddc253622"},
- {file = "numpy-1.23.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeba539285dcf0a1ba755945865ec61240ede5432df41d6e29fab305f4384db2"},
- {file = "numpy-1.23.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e8229f3687cdadba2c4faef39204feb51ef7c1a9b669247d49a24f3e2e1617c"},
- {file = "numpy-1.23.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68b69f52e6545af010b76516f5daaef6173e73353e3295c5cb9f96c35d755641"},
- {file = "numpy-1.23.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1408c3527a74a0209c781ac82bde2182b0f0bf54dea6e6a363fe0cc4488a7ce7"},
- {file = "numpy-1.23.1-cp38-cp38-win32.whl", hash = "sha256:47f10ab202fe4d8495ff484b5561c65dd59177949ca07975663f4494f7269e3e"},
- {file = "numpy-1.23.1-cp38-cp38-win_amd64.whl", hash = "sha256:37e5ebebb0eb54c5b4a9b04e6f3018e16b8ef257d26c8945925ba8105008e645"},
- {file = "numpy-1.23.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:173f28921b15d341afadf6c3898a34f20a0569e4ad5435297ba262ee8941e77b"},
- {file = "numpy-1.23.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:876f60de09734fbcb4e27a97c9a286b51284df1326b1ac5f1bf0ad3678236b22"},
- {file = "numpy-1.23.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35590b9c33c0f1c9732b3231bb6a72d1e4f77872390c47d50a615686ae7ed3fd"},
- {file = "numpy-1.23.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a35c4e64dfca659fe4d0f1421fc0f05b8ed1ca8c46fb73d9e5a7f175f85696bb"},
- {file = "numpy-1.23.1-cp39-cp39-win32.whl", hash = "sha256:c2f91f88230042a130ceb1b496932aa717dcbd665350beb821534c5c7e15881c"},
- {file = "numpy-1.23.1-cp39-cp39-win_amd64.whl", hash = "sha256:37ece2bd095e9781a7156852e43d18044fd0d742934833335599c583618181b9"},
- {file = "numpy-1.23.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8002574a6b46ac3b5739a003b5233376aeac5163e5dcd43dd7ad062f3e186129"},
- {file = "numpy-1.23.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d732d17b8a9061540a10fda5bfeabca5785700ab5469a5e9b93aca5e2d3a5fb"},
- {file = "numpy-1.23.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:55df0f7483b822855af67e38fb3a526e787adf189383b4934305565d71c4b148"},
- {file = "numpy-1.23.1.tar.gz", hash = "sha256:d748ef349bfef2e1194b59da37ed5a29c19ea8d7e6342019921ba2ba4fd8b624"},
-]
-
-[[package]]
-name = "packaging"
-version = "21.3"
-description = "Core utilities for Python packages"
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
- {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
-]
-
-[package.dependencies]
-pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
-
-[[package]]
-name = "pandas"
-version = "1.4.3"
-description = "Powerful data structures for data analysis, time series, and statistics"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "pandas-1.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d51674ed8e2551ef7773820ef5dab9322be0828629f2cbf8d1fc31a0c4fed640"},
- {file = "pandas-1.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:16ad23db55efcc93fa878f7837267973b61ea85d244fc5ff0ccbcfa5638706c5"},
- {file = "pandas-1.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:958a0588149190c22cdebbc0797e01972950c927a11a900fe6c2296f207b1d6f"},
- {file = "pandas-1.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e48fbb64165cda451c06a0f9e4c7a16b534fcabd32546d531b3c240ce2844112"},
- {file = "pandas-1.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f803320c9da732cc79210d7e8cc5c8019aad512589c910c66529eb1b1818230"},
- {file = "pandas-1.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:2893e923472a5e090c2d5e8db83e8f907364ec048572084c7d10ef93546be6d1"},
- {file = "pandas-1.4.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:24ea75f47bbd5574675dae21d51779a4948715416413b30614c1e8b480909f81"},
- {file = "pandas-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ebc990bd34f4ac3c73a2724c2dcc9ee7bf1ce6cf08e87bb25c6ad33507e318"},
- {file = "pandas-1.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d6c0106415ff1a10c326c49bc5dd9ea8b9897a6ca0c8688eb9c30ddec49535ef"},
- {file = "pandas-1.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78b00429161ccb0da252229bcda8010b445c4bf924e721265bec5a6e96a92e92"},
- {file = "pandas-1.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dfbf16b1ea4f4d0ee11084d9c026340514d1d30270eaa82a9f1297b6c8ecbf0"},
- {file = "pandas-1.4.3-cp38-cp38-win32.whl", hash = "sha256:48350592665ea3cbcd07efc8c12ff12d89be09cd47231c7925e3b8afada9d50d"},
- {file = "pandas-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:605d572126eb4ab2eadf5c59d5d69f0608df2bf7bcad5c5880a47a20a0699e3e"},
- {file = "pandas-1.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a3924692160e3d847e18702bb048dc38e0e13411d2b503fecb1adf0fcf950ba4"},
- {file = "pandas-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:07238a58d7cbc8a004855ade7b75bbd22c0db4b0ffccc721556bab8a095515f6"},
- {file = "pandas-1.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:755679c49460bd0d2f837ab99f0a26948e68fa0718b7e42afbabd074d945bf84"},
- {file = "pandas-1.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41fc406e374590a3d492325b889a2686b31e7a7780bec83db2512988550dadbf"},
- {file = "pandas-1.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d9382f72a4f0e93909feece6fef5500e838ce1c355a581b3d8f259839f2ea76"},
- {file = "pandas-1.4.3-cp39-cp39-win32.whl", hash = "sha256:0daf876dba6c622154b2e6741f29e87161f844e64f84801554f879d27ba63c0d"},
- {file = "pandas-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:721a3dd2f06ef942f83a819c0f3f6a648b2830b191a72bbe9451bcd49c3bd42e"},
- {file = "pandas-1.4.3.tar.gz", hash = "sha256:2ff7788468e75917574f080cd4681b27e1a7bf36461fe968b49a87b5a54d007c"},
-]
-
-[package.dependencies]
-numpy = [
- {version = ">=1.18.5", markers = "(platform_machine != \"aarch64\" and platform_machine != \"arm64\") and python_version < \"3.10\""},
- {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""},
- {version = ">=1.20.0", markers = "platform_machine == \"arm64\" and python_version < \"3.10\""},
- {version = ">=1.21.0", markers = "python_version >= \"3.10\""},
-]
-python-dateutil = ">=2.8.1"
-pytz = ">=2020.1"
-
-[package.extras]
-test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"]
-
-[[package]]
-name = "pandocfilters"
-version = "1.5.0"
-description = "Utilities for writing pandoc filters in python"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-files = [
- {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"},
- {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"},
-]
-
-[[package]]
-name = "parso"
-version = "0.8.3"
-description = "A Python Parser"
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"},
- {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"},
-]
-
-[package.extras]
-qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
-testing = ["docopt", "pytest (<6.0.0)"]
-
-[[package]]
-name = "pexpect"
-version = "4.8.0"
-description = "Pexpect allows easy control of interactive console applications."
-optional = false
-python-versions = "*"
-files = [
- {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"},
- {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"},
-]
-
-[package.dependencies]
-ptyprocess = ">=0.5"
-
-[[package]]
-name = "pickleshare"
-version = "0.7.5"
-description = "Tiny 'shelve'-like database with concurrency support"
-optional = false
-python-versions = "*"
-files = [
- {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"},
- {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"},
-]
-
-[[package]]
-name = "pillow"
-version = "9.2.0"
-description = "Python Imaging Library (Fork)"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "Pillow-9.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a9c9bc489f8ab30906d7a85afac4b4944a572a7432e00698a7239f44a44e6efb"},
- {file = "Pillow-9.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:510cef4a3f401c246cfd8227b300828715dd055463cdca6176c2e4036df8bd4f"},
- {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7888310f6214f19ab2b6df90f3f06afa3df7ef7355fc025e78a3044737fab1f5"},
- {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:831e648102c82f152e14c1a0938689dbb22480c548c8d4b8b248b3e50967b88c"},
- {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cc1d2451e8a3b4bfdb9caf745b58e6c7a77d2e469159b0d527a4554d73694d1"},
- {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:136659638f61a251e8ed3b331fc6ccd124590eeff539de57c5f80ef3a9594e58"},
- {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6e8c66f70fb539301e064f6478d7453e820d8a2c631da948a23384865cd95544"},
- {file = "Pillow-9.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:37ff6b522a26d0538b753f0b4e8e164fdada12db6c6f00f62145d732d8a3152e"},
- {file = "Pillow-9.2.0-cp310-cp310-win32.whl", hash = "sha256:c79698d4cd9318d9481d89a77e2d3fcaeff5486be641e60a4b49f3d2ecca4e28"},
- {file = "Pillow-9.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:254164c57bab4b459f14c64e93df11eff5ded575192c294a0c49270f22c5d93d"},
- {file = "Pillow-9.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:adabc0bce035467fb537ef3e5e74f2847c8af217ee0be0455d4fec8adc0462fc"},
- {file = "Pillow-9.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:336b9036127eab855beec9662ac3ea13a4544a523ae273cbf108b228ecac8437"},
- {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50dff9cc21826d2977ef2d2a205504034e3a4563ca6f5db739b0d1026658e004"},
- {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb6259196a589123d755380b65127ddc60f4c64b21fc3bb46ce3a6ea663659b0"},
- {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0554af24df2bf96618dac71ddada02420f946be943b181108cac55a7a2dcd4"},
- {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:15928f824870535c85dbf949c09d6ae7d3d6ac2d6efec80f3227f73eefba741c"},
- {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:bdd0de2d64688ecae88dd8935012c4a72681e5df632af903a1dca8c5e7aa871a"},
- {file = "Pillow-9.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5b87da55a08acb586bad5c3aa3b86505f559b84f39035b233d5bf844b0834b1"},
- {file = "Pillow-9.2.0-cp311-cp311-win32.whl", hash = "sha256:b6d5e92df2b77665e07ddb2e4dbd6d644b78e4c0d2e9272a852627cdba0d75cf"},
- {file = "Pillow-9.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6bf088c1ce160f50ea40764f825ec9b72ed9da25346216b91361eef8ad1b8f8c"},
- {file = "Pillow-9.2.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:2c58b24e3a63efd22554c676d81b0e57f80e0a7d3a5874a7e14ce90ec40d3069"},
- {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef7592281f7c174d3d6cbfbb7ee5984a671fcd77e3fc78e973d492e9bf0eb3f"},
- {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dcd7b9c7139dc8258d164b55696ecd16c04607f1cc33ba7af86613881ffe4ac8"},
- {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a138441e95562b3c078746a22f8fca8ff1c22c014f856278bdbdd89ca36cff1b"},
- {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:93689632949aff41199090eff5474f3990b6823404e45d66a5d44304e9cdc467"},
- {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:f3fac744f9b540148fa7715a435d2283b71f68bfb6d4aae24482a890aed18b59"},
- {file = "Pillow-9.2.0-cp37-cp37m-win32.whl", hash = "sha256:fa768eff5f9f958270b081bb33581b4b569faabf8774726b283edb06617101dc"},
- {file = "Pillow-9.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:69bd1a15d7ba3694631e00df8de65a8cb031911ca11f44929c97fe05eb9b6c1d"},
- {file = "Pillow-9.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:030e3460861488e249731c3e7ab59b07c7853838ff3b8e16aac9561bb345da14"},
- {file = "Pillow-9.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:74a04183e6e64930b667d321524e3c5361094bb4af9083db5c301db64cd341f3"},
- {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d33a11f601213dcd5718109c09a52c2a1c893e7461f0be2d6febc2879ec2402"},
- {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fd6f5e3c0e4697fa7eb45b6e93996299f3feee73a3175fa451f49a74d092b9f"},
- {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a647c0d4478b995c5e54615a2e5360ccedd2f85e70ab57fbe817ca613d5e63b8"},
- {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:4134d3f1ba5f15027ff5c04296f13328fecd46921424084516bdb1b2548e66ff"},
- {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:bc431b065722a5ad1dfb4df354fb9333b7a582a5ee39a90e6ffff688d72f27a1"},
- {file = "Pillow-9.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1536ad017a9f789430fb6b8be8bf99d2f214c76502becc196c6f2d9a75b01b76"},
- {file = "Pillow-9.2.0-cp38-cp38-win32.whl", hash = "sha256:2ad0d4df0f5ef2247e27fc790d5c9b5a0af8ade9ba340db4a73bb1a4a3e5fb4f"},
- {file = "Pillow-9.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:ec52c351b35ca269cb1f8069d610fc45c5bd38c3e91f9ab4cbbf0aebc136d9c8"},
- {file = "Pillow-9.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ed2c4ef2451de908c90436d6e8092e13a43992f1860275b4d8082667fbb2ffc"},
- {file = "Pillow-9.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ad2f835e0ad81d1689f1b7e3fbac7b01bb8777d5a985c8962bedee0cc6d43da"},
- {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea98f633d45f7e815db648fd7ff0f19e328302ac36427343e4432c84432e7ff4"},
- {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7761afe0126d046974a01e030ae7529ed0ca6a196de3ec6937c11df0df1bc91c"},
- {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a54614049a18a2d6fe156e68e188da02a046a4a93cf24f373bffd977e943421"},
- {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:5aed7dde98403cd91d86a1115c78d8145c83078e864c1de1064f52e6feb61b20"},
- {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:13b725463f32df1bfeacbf3dd197fb358ae8ebcd8c5548faa75126ea425ccb60"},
- {file = "Pillow-9.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:808add66ea764ed97d44dda1ac4f2cfec4c1867d9efb16a33d158be79f32b8a4"},
- {file = "Pillow-9.2.0-cp39-cp39-win32.whl", hash = "sha256:337a74fd2f291c607d220c793a8135273c4c2ab001b03e601c36766005f36885"},
- {file = "Pillow-9.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:fac2d65901fb0fdf20363fbd345c01958a742f2dc62a8dd4495af66e3ff502a4"},
- {file = "Pillow-9.2.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ad2277b185ebce47a63f4dc6302e30f05762b688f8dc3de55dbae4651872cdf3"},
- {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c7b502bc34f6e32ba022b4a209638f9e097d7a9098104ae420eb8186217ebbb"},
- {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d1f14f5f691f55e1b47f824ca4fdcb4b19b4323fe43cc7bb105988cad7496be"},
- {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:dfe4c1fedfde4e2fbc009d5ad420647f7730d719786388b7de0999bf32c0d9fd"},
- {file = "Pillow-9.2.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:f07f1f00e22b231dd3d9b9208692042e29792d6bd4f6639415d2f23158a80013"},
- {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1802f34298f5ba11d55e5bb09c31997dc0c6aed919658dfdf0198a2fe75d5490"},
- {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17d4cafe22f050b46d983b71c707162d63d796a1235cdf8b9d7a112e97b15bac"},
- {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:96b5e6874431df16aee0c1ba237574cb6dff1dcb173798faa6a9d8b399a05d0e"},
- {file = "Pillow-9.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0030fdbd926fb85844b8b92e2f9449ba89607231d3dd597a21ae72dc7fe26927"},
- {file = "Pillow-9.2.0.tar.gz", hash = "sha256:75e636fd3e0fb872693f23ccb8a5ff2cd578801251f3a4f6854c6a5d437d3c04"},
-]
-
-[package.extras]
-docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"]
-tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
-
-[[package]]
-name = "pkgutil-resolve-name"
-version = "1.3.10"
-description = "Resolve a name to an object."
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"},
- {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"},
-]
-
-[[package]]
-name = "prometheus-client"
-version = "0.14.1"
-description = "Python client for the Prometheus monitoring system."
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "prometheus_client-0.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"},
- {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"},
-]
-
-[package.extras]
-twisted = ["twisted"]
-
-[[package]]
-name = "prompt-toolkit"
-version = "3.0.30"
-description = "Library for building powerful interactive command lines in Python"
-optional = false
-python-versions = ">=3.6.2"
-files = [
- {file = "prompt_toolkit-3.0.30-py3-none-any.whl", hash = "sha256:d8916d3f62a7b67ab353a952ce4ced6a1d2587dfe9ef8ebc30dd7c386751f289"},
- {file = "prompt_toolkit-3.0.30.tar.gz", hash = "sha256:859b283c50bde45f5f97829f77a4674d1c1fcd88539364f1b28a37805cfd89c0"},
-]
-
-[package.dependencies]
-wcwidth = "*"
-
-[[package]]
-name = "psutil"
-version = "5.9.1"
-description = "Cross-platform lib for process and system monitoring in Python."
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-files = [
- {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:799759d809c31aab5fe4579e50addf84565e71c1dc9f1c31258f159ff70d3f87"},
- {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9272167b5f5fbfe16945be3db475b3ce8d792386907e673a209da686176552af"},
- {file = "psutil-5.9.1-cp27-cp27m-win32.whl", hash = "sha256:0904727e0b0a038830b019551cf3204dd48ef5c6868adc776e06e93d615fc5fc"},
- {file = "psutil-5.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e7e10454cb1ab62cc6ce776e1c135a64045a11ec4c6d254d3f7689c16eb3efd2"},
- {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:56960b9e8edcca1456f8c86a196f0c3d8e3e361320071c93378d41445ffd28b0"},
- {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:44d1826150d49ffd62035785a9e2c56afcea66e55b43b8b630d7706276e87f22"},
- {file = "psutil-5.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7be9d7f5b0d206f0bbc3794b8e16fb7dbc53ec9e40bbe8787c6f2d38efcf6c9"},
- {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd9246e4cdd5b554a2ddd97c157e292ac11ef3e7af25ac56b08b455c829dca8"},
- {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29a442e25fab1f4d05e2655bb1b8ab6887981838d22effa2396d584b740194de"},
- {file = "psutil-5.9.1-cp310-cp310-win32.whl", hash = "sha256:20b27771b077dcaa0de1de3ad52d22538fe101f9946d6dc7869e6f694f079329"},
- {file = "psutil-5.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:58678bbadae12e0db55186dc58f2888839228ac9f41cc7848853539b70490021"},
- {file = "psutil-5.9.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3a76ad658641172d9c6e593de6fe248ddde825b5866464c3b2ee26c35da9d237"},
- {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6a11e48cb93a5fa606306493f439b4aa7c56cb03fc9ace7f6bfa21aaf07c453"},
- {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:068935df39055bf27a29824b95c801c7a5130f118b806eee663cad28dca97685"},
- {file = "psutil-5.9.1-cp36-cp36m-win32.whl", hash = "sha256:0f15a19a05f39a09327345bc279c1ba4a8cfb0172cc0d3c7f7d16c813b2e7d36"},
- {file = "psutil-5.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:db417f0865f90bdc07fa30e1aadc69b6f4cad7f86324b02aa842034efe8d8c4d"},
- {file = "psutil-5.9.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:91c7ff2a40c373d0cc9121d54bc5f31c4fa09c346528e6a08d1845bce5771ffc"},
- {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fea896b54f3a4ae6f790ac1d017101252c93f6fe075d0e7571543510f11d2676"},
- {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3054e923204b8e9c23a55b23b6df73a8089ae1d075cb0bf711d3e9da1724ded4"},
- {file = "psutil-5.9.1-cp37-cp37m-win32.whl", hash = "sha256:d2d006286fbcb60f0b391741f520862e9b69f4019b4d738a2a45728c7e952f1b"},
- {file = "psutil-5.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b14ee12da9338f5e5b3a3ef7ca58b3cba30f5b66f7662159762932e6d0b8f680"},
- {file = "psutil-5.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:19f36c16012ba9cfc742604df189f2f28d2720e23ff7d1e81602dbe066be9fd1"},
- {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:944c4b4b82dc4a1b805329c980f270f170fdc9945464223f2ec8e57563139cf4"},
- {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b6750a73a9c4a4e689490ccb862d53c7b976a2a35c4e1846d049dcc3f17d83b"},
- {file = "psutil-5.9.1-cp38-cp38-win32.whl", hash = "sha256:a8746bfe4e8f659528c5c7e9af5090c5a7d252f32b2e859c584ef7d8efb1e689"},
- {file = "psutil-5.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:79c9108d9aa7fa6fba6e668b61b82facc067a6b81517cab34d07a84aa89f3df0"},
- {file = "psutil-5.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:28976df6c64ddd6320d281128817f32c29b539a52bdae5e192537bc338a9ec81"},
- {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b88f75005586131276634027f4219d06e0561292be8bd6bc7f2f00bdabd63c4e"},
- {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:645bd4f7bb5b8633803e0b6746ff1628724668681a434482546887d22c7a9537"},
- {file = "psutil-5.9.1-cp39-cp39-win32.whl", hash = "sha256:32c52611756096ae91f5d1499fe6c53b86f4a9ada147ee42db4991ba1520e574"},
- {file = "psutil-5.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:f65f9a46d984b8cd9b3750c2bdb419b2996895b005aefa6cbaba9a143b1ce2c5"},
- {file = "psutil-5.9.1.tar.gz", hash = "sha256:57f1819b5d9e95cdfb0c881a8a5b7d542ed0b7c522d575706a80bedc848c8954"},
-]
-
-[package.extras]
-test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"]
-
-[[package]]
-name = "ptyprocess"
-version = "0.7.0"
-description = "Run a subprocess in a pseudo terminal"
-optional = false
-python-versions = "*"
-files = [
- {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"},
- {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"},
-]
-
-[[package]]
-name = "pure-eval"
-version = "0.2.2"
-description = "Safely evaluate AST nodes without side effects"
-optional = false
-python-versions = "*"
-files = [
- {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"},
- {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"},
-]
-
-[package.extras]
-tests = ["pytest"]
-
-[[package]]
-name = "py"
-version = "1.11.0"
-description = "library with cross-python path, ini-parsing, io, code, log facilities"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-files = [
- {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
- {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
-]
-
-[[package]]
-name = "pyathena"
-version = "2.13.0"
-description = "Python DB API 2.0 (PEP 249) client for Amazon Athena"
-optional = false
-python-versions = ">=3.7.1,<4.0.0"
-files = [
- {file = "PyAthena-2.13.0.tar.gz", hash = "sha256:b6dec8769d8cb91ec3a570d4c2dcea98c85044e6f7d35f26fc6c5e48989ad63e"},
- {file = "pyathena-2.13.0-py3-none-any.whl", hash = "sha256:e541fa3873010d23848213cee87cd4823877420bcb5966f84718de8da8bc1b19"},
-]
-
-[package.dependencies]
-boto3 = ">=1.21.0"
-botocore = ">=1.24.7"
-tenacity = ">=4.1.0"
-
-[package.extras]
-arrow = ["pyarrow (>=7.0.0)"]
-fastparquet = ["fastparquet (>=0.4.0)"]
-pandas = ["pandas (>=1.3.0)", "s3fs (>=2021.09.0)"]
-sqlalchemy = ["sqlalchemy (>=1.0.0,<2.0.0)"]
-
-[[package]]
-name = "pycparser"
-version = "2.21"
-description = "C parser in Python"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-files = [
- {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
- {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
-]
-
-[[package]]
-name = "pygments"
-version = "2.12.0"
-description = "Pygments is a syntax highlighting package written in Python."
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"},
- {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"},
-]
-
-[[package]]
-name = "pyparsing"
-version = "3.0.9"
-description = "pyparsing module - Classes and methods to define and execute parsing grammars"
-optional = false
-python-versions = ">=3.6.8"
-files = [
- {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"},
- {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"},
-]
-
-[package.extras]
-diagrams = ["jinja2", "railroad-diagrams"]
-
-[[package]]
-name = "pyrsistent"
-version = "0.18.1"
-description = "Persistent/Functional/Immutable data structures"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
- {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
- {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
- {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
- {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
- {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
- {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
- {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
- {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
- {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
- {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
- {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
- {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
- {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
- {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
- {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
- {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
- {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
- {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
- {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
- {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
-]
-
-[[package]]
-name = "python-dateutil"
-version = "2.8.2"
-description = "Extensions to the standard Python datetime module"
-optional = false
-python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
-files = [
- {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
- {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
-]
-
-[package.dependencies]
-six = ">=1.5"
-
-[[package]]
-name = "python-dotenv"
-version = "0.20.0"
-description = "Read key-value pairs from a .env file and set them as environment variables"
-optional = false
-python-versions = ">=3.5"
-files = [
- {file = "python-dotenv-0.20.0.tar.gz", hash = "sha256:b7e3b04a59693c42c36f9ab1cc2acc46fa5df8c78e178fc33a8d4cd05c8d498f"},
- {file = "python_dotenv-0.20.0-py3-none-any.whl", hash = "sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938"},
-]
-
-[package.extras]
-cli = ["click (>=5.0)"]
-
-[[package]]
-name = "pytz"
-version = "2022.1"
-description = "World timezone definitions, modern and historical"
-optional = false
-python-versions = "*"
-files = [
- {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"},
- {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"},
-]
-
-[[package]]
-name = "pywin32"
-version = "304"
-description = "Python for Window Extensions"
-optional = false
-python-versions = "*"
-files = [
- {file = "pywin32-304-cp310-cp310-win32.whl", hash = "sha256:3c7bacf5e24298c86314f03fa20e16558a4e4138fc34615d7de4070c23e65af3"},
- {file = "pywin32-304-cp310-cp310-win_amd64.whl", hash = "sha256:4f32145913a2447736dad62495199a8e280a77a0ca662daa2332acf849f0be48"},
- {file = "pywin32-304-cp310-cp310-win_arm64.whl", hash = "sha256:d3ee45adff48e0551d1aa60d2ec066fec006083b791f5c3527c40cd8aefac71f"},
- {file = "pywin32-304-cp311-cp311-win32.whl", hash = "sha256:30c53d6ce44c12a316a06c153ea74152d3b1342610f1b99d40ba2795e5af0269"},
- {file = "pywin32-304-cp311-cp311-win_amd64.whl", hash = "sha256:7ffa0c0fa4ae4077e8b8aa73800540ef8c24530057768c3ac57c609f99a14fd4"},
- {file = "pywin32-304-cp311-cp311-win_arm64.whl", hash = "sha256:cbbe34dad39bdbaa2889a424d28752f1b4971939b14b1bb48cbf0182a3bcfc43"},
- {file = "pywin32-304-cp36-cp36m-win32.whl", hash = "sha256:be253e7b14bc601718f014d2832e4c18a5b023cbe72db826da63df76b77507a1"},
- {file = "pywin32-304-cp36-cp36m-win_amd64.whl", hash = "sha256:de9827c23321dcf43d2f288f09f3b6d772fee11e809015bdae9e69fe13213988"},
- {file = "pywin32-304-cp37-cp37m-win32.whl", hash = "sha256:f64c0377cf01b61bd5e76c25e1480ca8ab3b73f0c4add50538d332afdf8f69c5"},
- {file = "pywin32-304-cp37-cp37m-win_amd64.whl", hash = "sha256:bb2ea2aa81e96eee6a6b79d87e1d1648d3f8b87f9a64499e0b92b30d141e76df"},
- {file = "pywin32-304-cp38-cp38-win32.whl", hash = "sha256:94037b5259701988954931333aafd39cf897e990852115656b014ce72e052e96"},
- {file = "pywin32-304-cp38-cp38-win_amd64.whl", hash = "sha256:ead865a2e179b30fb717831f73cf4373401fc62fbc3455a0889a7ddac848f83e"},
- {file = "pywin32-304-cp39-cp39-win32.whl", hash = "sha256:25746d841201fd9f96b648a248f731c1dec851c9a08b8e33da8b56148e4c65cc"},
- {file = "pywin32-304-cp39-cp39-win_amd64.whl", hash = "sha256:d24a3382f013b21aa24a5cfbfad5a2cd9926610c0affde3e8ab5b3d7dbcf4ac9"},
-]
-
-[[package]]
-name = "pywinpty"
-version = "2.0.6"
-description = "Pseudo terminal support for Windows from Python."
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "pywinpty-2.0.6-cp310-none-win_amd64.whl", hash = "sha256:7fadc5265484c7d7c84554b9f1cfd7acf6383a877c1cfb3ee77d51179145b3ce"},
- {file = "pywinpty-2.0.6-cp37-none-win_amd64.whl", hash = "sha256:906a3048ecfec6ece1b141594ebbbcd5c4751960714c50524e8e907bb77c9207"},
- {file = "pywinpty-2.0.6-cp38-none-win_amd64.whl", hash = "sha256:5e4b2167e813575bf495b46adb2d88be5c470d9daf49d488900350853e95248f"},
- {file = "pywinpty-2.0.6-cp39-none-win_amd64.whl", hash = "sha256:f7ae5d29f1c3d028e06032f8d267b51fd72ea219b9bba3e2a972a7bc26a25a87"},
- {file = "pywinpty-2.0.6.tar.gz", hash = "sha256:a91a77d23f29a58b44f62a9474a31ed67df1277cddb69665275f8d22429046ac"},
-]
-
-[[package]]
-name = "pyzmq"
-version = "23.2.0"
-description = "Python bindings for 0MQ"
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "pyzmq-23.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:22ac0243a41798e3eb5d5714b28c2f28e3d10792dffbc8a5fca092f975fdeceb"},
- {file = "pyzmq-23.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f685003d836ad0e5d4f08d1e024ee3ac7816eb2f873b2266306eef858f058133"},
- {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d4651de7316ec8560afe430fb042c0782ed8ac54c0be43a515944d7c78fddac8"},
- {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bcc6953e47bcfc9028ddf9ab2a321a3c51d7cc969db65edec092019bb837959f"},
- {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e08671dc202a1880fa522f921f35ca5925ba30da8bc96228d74a8f0643ead9c"},
- {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de727ea906033b30527b4a99498f19aca3f4d1073230a958679a5b726e2784e0"},
- {file = "pyzmq-23.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5aa9da520e4bb8cee8189f2f541701405e7690745094ded7a37b425d60527ea"},
- {file = "pyzmq-23.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f3ff6abde52e702397949054cb5b06c1c75b5d6542f6a2ce029e46f71ffbbbf2"},
- {file = "pyzmq-23.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e2e2db5c6ef376e97c912733dfc24406f5949474d03e800d5f07b6aca4d870af"},
- {file = "pyzmq-23.2.0-cp310-cp310-win32.whl", hash = "sha256:e669913cb2179507628419ec4f0e453e48ce6f924de5884d396f18c31836089c"},
- {file = "pyzmq-23.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:a3dc339f7bc185d5fd0fd976242a5baf35de404d467e056484def8a4dd95868b"},
- {file = "pyzmq-23.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:30c365e60c39c53f8eea042b37ea28304ffa6558fb7241cf278745095a5757da"},
- {file = "pyzmq-23.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c2d8b69a2bf239ae3d987537bf3fbc2b044a405394cf4c258fc684971dd48b2"},
- {file = "pyzmq-23.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:602835e5672ca9ca1d78e6c148fb28c4f91b748ebc41fbd2f479d8763d58bc9b"},
- {file = "pyzmq-23.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:831da96ba3f36cc892f0afbb4fb89b28b61b387261676e55d55a682addbd29f7"},
- {file = "pyzmq-23.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c8dec8a2f3f0bb462e6439df436cd8c7ec37968e90b4209ac621e7fbc0ed3b00"},
- {file = "pyzmq-23.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:814e5aaf0c3be9991a59066eafb2d6e117aed6b413e3e7e9be45d4e55f5e2748"},
- {file = "pyzmq-23.2.0-cp36-cp36m-win32.whl", hash = "sha256:8496a2a5efd055c61ac2c6a18116c768a25c644b6747dcfde43e91620ab3453c"},
- {file = "pyzmq-23.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:60746a7e8558655420a69441c0a1d47ed225ed3ac355920b96a96d0554ef7e6b"},
- {file = "pyzmq-23.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5cb642e94337b0c76c9c8cb9bfb0f8a78654575847d080d3e1504f312d691fc3"},
- {file = "pyzmq-23.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:444f7d615d5f686d0ef508b9edfa8a286e6d89f449a1ba37b60ef69d869220a3"},
- {file = "pyzmq-23.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c9638e0057e3f1a8b7c5ce33c7575349d9183a033a19b5676ad55096ae36820b"},
- {file = "pyzmq-23.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:004a431dfa0459123e6f4660d7e3c4ac19217d134ca38bacfffb2e78716fe944"},
- {file = "pyzmq-23.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5592fb4316f895922b1cacb91b04a0fa09d6f6f19bbab4442b4d0a0825177b93"},
- {file = "pyzmq-23.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c0a5f987d73fd9b46c3d180891f829afda714ab6bab30a1218724d4a0a63afd8"},
- {file = "pyzmq-23.2.0-cp37-cp37m-win32.whl", hash = "sha256:d11628212fd731b8986f1561d9bb3f8c38d9c15b330c3d8a88963519fbcd553b"},
- {file = "pyzmq-23.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:558f5f636e3e65f261b64925e8b190e8689e334911595394572cc7523879006d"},
- {file = "pyzmq-23.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:61b97f624da42813f74977425a3a6144d604ea21cf065616d36ea3a866d92c1c"},
- {file = "pyzmq-23.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:693c96ae4d975eb8efa1639670e9b1fac0c3f98b7845b65c0f369141fb4bb21f"},
- {file = "pyzmq-23.2.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b054525c9f7e240562185bf21671ca16d56bde92e9bd0f822c07dec7626b704"},
- {file = "pyzmq-23.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:859059caf564f0c9398c9005278055ed3d37af4d73de6b1597821193b04ca09b"},
- {file = "pyzmq-23.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8355744fdbdeac5cfadfa4f38b82029b5f2b8cab7472a33453a217a7f3a9dce2"},
- {file = "pyzmq-23.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:420b9abd1a7330687a095373b8280a20cdee04342fbc8ccb3b56d9ec8efd4e62"},
- {file = "pyzmq-23.2.0-cp38-cp38-win32.whl", hash = "sha256:59928dfebe93cf1e203e3cb0fd5d5dd384da56b99c8305f2e1b0a933751710f6"},
- {file = "pyzmq-23.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:c882f1d4f96fbd807e92c334251d8ebd159a1ef89059ccd386ddea83fdb91bd8"},
- {file = "pyzmq-23.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:ced12075cdf3c7332ecc1960f77f7439d5ebb8ea20bbd3c34c8299e694f1b0a1"},
- {file = "pyzmq-23.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3a4d87342c2737fbb9eee5c33c792db27b36b04957b4e6b7edd73a5b239a2a13"},
- {file = "pyzmq-23.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:99cedf38eaddf263cf7e2a50e405f12c02cedf6d9df00a0d9c5d7b9417b57f76"},
- {file = "pyzmq-23.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d1610260cc672975723fcf7705c69a95f3b88802a594c9867781bedd9b13422c"},
- {file = "pyzmq-23.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c223a13555444707a0a7ebc6f9ee63053147c8c082bd1a31fd1207a03e8b0500"},
- {file = "pyzmq-23.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f5fdb00d65ec44b10cc6b9b6318ef1363b81647a4aa3270ca39565eadb2d1201"},
- {file = "pyzmq-23.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:984b232802eddf9f0be264a4d57a10b3a1fd7319df14ee6fc7b41c6d155a3e6c"},
- {file = "pyzmq-23.2.0-cp39-cp39-win32.whl", hash = "sha256:f146648941cadaaaf01254a75651a23c08159d009d36c5af42a7cc200a5e53ec"},
- {file = "pyzmq-23.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:83005d8928f8a5cebcfb33af3bfb84b1ad65d882b899141a331cc5d07d89f093"},
- {file = "pyzmq-23.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fee86542dc4ee8229e023003e3939b4d58cc2453922cf127778b69505fc9064b"},
- {file = "pyzmq-23.2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5d57542429df6acff02ff022067aa75b677603cee70e3abb9742787545eec966"},
- {file = "pyzmq-23.2.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:057b154471e096e2dda147f7b057041acc303bb7ca4aa24c3b88c6cecdd78717"},
- {file = "pyzmq-23.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:5d92e7cbeab7f70b08cc0f27255b0bb2500afc30f31075bca0b1cb87735d186c"},
- {file = "pyzmq-23.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:eb4a573a8499685d62545e806d8fd143c84ac8b3439f925cd92c8763f0ed9bd7"},
- {file = "pyzmq-23.2.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:da338e2728410d74ddeb1479ec67cfba73311607037455a40f92b6f5c62bf11d"},
- {file = "pyzmq-23.2.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1b2a21f595f8cc549abd6c8de1fcd34c83441e35fb24b8a59bf161889c62a486"},
- {file = "pyzmq-23.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8c0f4d6f8c985bab83792be26ff3233940ba42e22237610ac50cbcfc10a5c235"},
- {file = "pyzmq-23.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bbabd1df23bf63ae829e81200034c0e433499275a6ed29ca1a912ea7629426d9"},
- {file = "pyzmq-23.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21552624ce69e69f7924f413b802b1fb554f4c0497f837810e429faa1cd4f163"},
- {file = "pyzmq-23.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c616893a577e9d6773a3836732fd7e2a729157a108b8fccd31c87512fa01671a"},
- {file = "pyzmq-23.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ce4f71e17fa849de41a06109030d3f6815fcc33338bf98dd0dde6d456d33c929"},
- {file = "pyzmq-23.2.0.tar.gz", hash = "sha256:a51f12a8719aad9dcfb55d456022f16b90abc8dde7d3ca93ce3120b40e3fa169"},
-]
-
-[package.dependencies]
-cffi = {version = "*", markers = "implementation_name == \"pypy\""}
-py = {version = "*", markers = "implementation_name == \"pypy\""}
-
-[[package]]
-name = "qtconsole"
-version = "5.3.1"
-description = "Jupyter Qt console"
-optional = false
-python-versions = ">= 3.7"
-files = [
- {file = "qtconsole-5.3.1-py3-none-any.whl", hash = "sha256:d364592d7ede3257f1e17fcdbfd339c26e2cc638ca4fa4ee56a724e26ea13c81"},
- {file = "qtconsole-5.3.1.tar.gz", hash = "sha256:b73723fac43938b684dcb237a88510dc7721c43a726cea8ade179a2927c0a2f3"},
-]
-
-[package.dependencies]
-ipykernel = ">=4.1"
-ipython-genutils = "*"
-jupyter-client = ">=4.1"
-jupyter-core = "*"
-pygments = "*"
-pyzmq = ">=17.1"
-qtpy = ">=2.0.1"
-traitlets = "<5.2.1 || >5.2.1,<5.2.2 || >5.2.2"
-
-[package.extras]
-doc = ["Sphinx (>=1.3)"]
-test = ["flaky", "pytest", "pytest-qt"]
-
-[[package]]
-name = "qtpy"
-version = "2.1.0"
-description = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)."
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "QtPy-2.1.0-py3-none-any.whl", hash = "sha256:aee0586081f943029312becece9f63977b0a9e3788f77a6ac8cc74802bb173d6"},
- {file = "QtPy-2.1.0.tar.gz", hash = "sha256:ca8cd4217175186344299ee4c0f7e7adcf362c70852ba35b255a534077025c06"},
-]
-
-[package.dependencies]
-packaging = "*"
-
-[package.extras]
-test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"]
-
-[[package]]
-name = "requests"
-version = "2.31.0"
-description = "Python HTTP for Humans."
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
- {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
-]
-
-[package.dependencies]
-certifi = ">=2017.4.17"
-charset-normalizer = ">=2,<4"
-idna = ">=2.5,<4"
-urllib3 = ">=1.21.1,<3"
-
-[package.extras]
-socks = ["PySocks (>=1.5.6,!=1.5.7)"]
-use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
-
-[[package]]
-name = "s3fs"
-version = "2022.7.1"
-description = "Convenient Filesystem interface over S3"
-optional = false
-python-versions = ">= 3.7"
-files = [
- {file = "s3fs-2022.7.1-py3-none-any.whl", hash = "sha256:97d91bfd78085f33d22c9697824126dbcd2438236951d8ff2374bb718af74e58"},
- {file = "s3fs-2022.7.1.tar.gz", hash = "sha256:4883d682cb96b769fca568dbbcaa33ff457ac8077a03af221e6f253adac05771"},
-]
-
-[package.dependencies]
-aiobotocore = ">=2.3.4,<2.4.0"
-aiohttp = "*"
-fsspec = "2022.7.1"
-
-[package.extras]
-awscli = ["aiobotocore[awscli] (>=2.3.4,<2.4.0)"]
-boto3 = ["aiobotocore[boto3] (>=2.3.4,<2.4.0)"]
-
-[[package]]
-name = "s3transfer"
-version = "0.5.2"
-description = "An Amazon S3 Transfer Manager"
-optional = false
-python-versions = ">= 3.6"
-files = [
- {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
- {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
-]
-
-[package.dependencies]
-botocore = ">=1.12.36,<2.0a.0"
-
-[package.extras]
-crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
-
-[[package]]
-name = "send2trash"
-version = "1.8.0"
-description = "Send file to trash natively under Mac OS X, Windows and Linux."
-optional = false
-python-versions = "*"
-files = [
- {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"},
- {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"},
-]
-
-[package.extras]
-nativelib = ["pyobjc-framework-Cocoa", "pywin32"]
-objc = ["pyobjc-framework-Cocoa"]
-win32 = ["pywin32"]
-
-[[package]]
-name = "setuptools"
-version = "68.0.0"
-description = "Easily download, build, install, upgrade, and uninstall Python packages"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"},
- {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"},
-]
-
-[package.extras]
-docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
-testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
-testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
-
-[[package]]
-name = "six"
-version = "1.16.0"
-description = "Python 2 and 3 compatibility utilities"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
-files = [
- {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
- {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
-]
-
-[[package]]
-name = "soupsieve"
-version = "2.3.2.post1"
-description = "A modern CSS selector implementation for Beautiful Soup."
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"},
- {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"},
-]
-
-[[package]]
-name = "stack-data"
-version = "0.3.0"
-description = "Extract data from python stack frames and tracebacks for informative displays"
-optional = false
-python-versions = "*"
-files = [
- {file = "stack_data-0.3.0-py3-none-any.whl", hash = "sha256:aa1d52d14d09c7a9a12bb740e6bdfffe0f5e8f4f9218d85e7c73a8c37f7ae38d"},
- {file = "stack_data-0.3.0.tar.gz", hash = "sha256:77bec1402dcd0987e9022326473fdbcc767304892a533ed8c29888dacb7dddbc"},
-]
-
-[package.dependencies]
-asttokens = "*"
-executing = "*"
-pure-eval = "*"
-
-[package.extras]
-tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
-
-[[package]]
-name = "tenacity"
-version = "8.0.1"
-description = "Retry code until it succeeds"
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "tenacity-8.0.1-py3-none-any.whl", hash = "sha256:f78f4ea81b0fabc06728c11dc2a8c01277bfc5181b321a4770471902e3eb844a"},
- {file = "tenacity-8.0.1.tar.gz", hash = "sha256:43242a20e3e73291a28bcbcacfd6e000b02d3857a9a9fff56b297a27afdc932f"},
-]
-
-[package.extras]
-doc = ["reno", "sphinx", "tornado (>=4.5)"]
-
-[[package]]
-name = "terminado"
-version = "0.15.0"
-description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library."
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "terminado-0.15.0-py3-none-any.whl", hash = "sha256:0d5f126fbfdb5887b25ae7d9d07b0d716b1cc0ccaacc71c1f3c14d228e065197"},
- {file = "terminado-0.15.0.tar.gz", hash = "sha256:ab4eeedccfcc1e6134bfee86106af90852c69d602884ea3a1e8ca6d4486e9bfe"},
-]
-
-[package.dependencies]
-ptyprocess = {version = "*", markers = "os_name != \"nt\""}
-pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""}
-tornado = ">=6.1.0"
-
-[package.extras]
-test = ["pre-commit", "pytest (>=6.0)", "pytest-timeout"]
-
-[[package]]
-name = "tinycss2"
-version = "1.1.1"
-description = "A tiny CSS parser"
-optional = false
-python-versions = ">=3.6"
-files = [
- {file = "tinycss2-1.1.1-py3-none-any.whl", hash = "sha256:fe794ceaadfe3cf3e686b22155d0da5780dd0e273471a51846d0a02bc204fec8"},
- {file = "tinycss2-1.1.1.tar.gz", hash = "sha256:b2e44dd8883c360c35dd0d1b5aad0b610e5156c2cb3b33434634e539ead9d8bf"},
-]
-
-[package.dependencies]
-webencodings = ">=0.4"
-
-[package.extras]
-doc = ["sphinx", "sphinx_rtd_theme"]
-test = ["coverage[toml]", "pytest", "pytest-cov", "pytest-flake8", "pytest-isort"]
-
-[[package]]
-name = "tornado"
-version = "6.2"
-description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
-optional = false
-python-versions = ">= 3.7"
-files = [
- {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"},
- {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"},
- {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"},
- {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"},
- {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"},
- {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"},
- {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"},
- {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"},
- {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"},
- {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"},
- {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"},
-]
-
-[[package]]
-name = "traitlets"
-version = "5.3.0"
-description = ""
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "traitlets-5.3.0-py3-none-any.whl", hash = "sha256:65fa18961659635933100db8ca120ef6220555286949774b9cfc106f941d1c7a"},
- {file = "traitlets-5.3.0.tar.gz", hash = "sha256:0bb9f1f9f017aa8ec187d8b1b2a7a6626a2a1d877116baba52a129bfa124f8e2"},
-]
-
-[package.extras]
-test = ["pre-commit", "pytest"]
-
-[[package]]
-name = "typing-extensions"
-version = "4.3.0"
-description = "Backported and Experimental Type Hints for Python 3.7+"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"},
- {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"},
-]
-
-[[package]]
-name = "urllib3"
-version = "1.26.11"
-description = "HTTP library with thread-safe connection pooling, file post, and more."
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4"
-files = [
- {file = "urllib3-1.26.11-py2.py3-none-any.whl", hash = "sha256:c33ccba33c819596124764c23a97d25f32b28433ba0dedeb77d873a38722c9bc"},
- {file = "urllib3-1.26.11.tar.gz", hash = "sha256:ea6e8fb210b19d950fab93b60c9009226c63a28808bc8386e05301e25883ac0a"},
-]
-
-[package.extras]
-brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
-secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)"]
-socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
-
-[[package]]
-name = "wcwidth"
-version = "0.2.5"
-description = "Measures the displayed width of unicode strings in a terminal"
-optional = false
-python-versions = "*"
-files = [
- {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
- {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"},
-]
-
-[[package]]
-name = "webencodings"
-version = "0.5.1"
-description = "Character encoding aliases for legacy web content"
-optional = false
-python-versions = "*"
-files = [
- {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
- {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
-]
-
-[[package]]
-name = "widgetsnbextension"
-version = "3.6.1"
-description = "IPython HTML widgets for Jupyter"
-optional = false
-python-versions = "*"
-files = [
- {file = "widgetsnbextension-3.6.1-py2.py3-none-any.whl", hash = "sha256:954e0faefdd414e4e013f17dbc7fd86f24cf1d243a3ac85d5f0fc2c2d2b50c66"},
- {file = "widgetsnbextension-3.6.1.tar.gz", hash = "sha256:9c84ae64c2893c7cbe2eaafc7505221a795c27d68938454034ac487319a75b10"},
-]
-
-[package.dependencies]
-notebook = ">=4.4.1"
-
-[[package]]
-name = "wrapt"
-version = "1.14.1"
-description = "Module for decorators, wrappers and monkey patching."
-optional = false
-python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
-files = [
- {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"},
- {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"},
- {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"},
- {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"},
- {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"},
- {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"},
- {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"},
- {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"},
- {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"},
- {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"},
- {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"},
- {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"},
- {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"},
- {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"},
- {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"},
- {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"},
- {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"},
- {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"},
- {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"},
- {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"},
- {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"},
- {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"},
- {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"},
- {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"},
- {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"},
- {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"},
- {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"},
- {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"},
- {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"},
- {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"},
- {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"},
- {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"},
- {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"},
- {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"},
- {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"},
- {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"},
- {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"},
- {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"},
- {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"},
- {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"},
- {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"},
- {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"},
- {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"},
- {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"},
- {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"},
- {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"},
- {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"},
- {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"},
- {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"},
- {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"},
- {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"},
- {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"},
- {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"},
- {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"},
- {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"},
- {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"},
- {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"},
- {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"},
- {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"},
- {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"},
- {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"},
- {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"},
- {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"},
- {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"},
-]
-
-[[package]]
-name = "yarl"
-version = "1.8.1"
-description = "Yet another URL library"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "yarl-1.8.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:abc06b97407868ef38f3d172762f4069323de52f2b70d133d096a48d72215d28"},
- {file = "yarl-1.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:07b21e274de4c637f3e3b7104694e53260b5fc10d51fb3ec5fed1da8e0f754e3"},
- {file = "yarl-1.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9de955d98e02fab288c7718662afb33aab64212ecb368c5dc866d9a57bf48880"},
- {file = "yarl-1.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ec362167e2c9fd178f82f252b6d97669d7245695dc057ee182118042026da40"},
- {file = "yarl-1.8.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:20df6ff4089bc86e4a66e3b1380460f864df3dd9dccaf88d6b3385d24405893b"},
- {file = "yarl-1.8.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5999c4662631cb798496535afbd837a102859568adc67d75d2045e31ec3ac497"},
- {file = "yarl-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed19b74e81b10b592084a5ad1e70f845f0aacb57577018d31de064e71ffa267a"},
- {file = "yarl-1.8.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e4808f996ca39a6463f45182e2af2fae55e2560be586d447ce8016f389f626f"},
- {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2d800b9c2eaf0684c08be5f50e52bfa2aa920e7163c2ea43f4f431e829b4f0fd"},
- {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6628d750041550c5d9da50bb40b5cf28a2e63b9388bac10fedd4f19236ef4957"},
- {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f5af52738e225fcc526ae64071b7e5342abe03f42e0e8918227b38c9aa711e28"},
- {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:76577f13333b4fe345c3704811ac7509b31499132ff0181f25ee26619de2c843"},
- {file = "yarl-1.8.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0c03f456522d1ec815893d85fccb5def01ffaa74c1b16ff30f8aaa03eb21e453"},
- {file = "yarl-1.8.1-cp310-cp310-win32.whl", hash = "sha256:ea30a42dc94d42f2ba4d0f7c0ffb4f4f9baa1b23045910c0c32df9c9902cb272"},
- {file = "yarl-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:9130ddf1ae9978abe63808b6b60a897e41fccb834408cde79522feb37fb72fb0"},
- {file = "yarl-1.8.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0ab5a138211c1c366404d912824bdcf5545ccba5b3ff52c42c4af4cbdc2c5035"},
- {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0fb2cb4204ddb456a8e32381f9a90000429489a25f64e817e6ff94879d432fc"},
- {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:85cba594433915d5c9a0d14b24cfba0339f57a2fff203a5d4fd070e593307d0b"},
- {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca7e596c55bd675432b11320b4eacc62310c2145d6801a1f8e9ad160685a231"},
- {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0f77539733e0ec2475ddcd4e26777d08996f8cd55d2aef82ec4d3896687abda"},
- {file = "yarl-1.8.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29e256649f42771829974e742061c3501cc50cf16e63f91ed8d1bf98242e5507"},
- {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7fce6cbc6c170ede0221cc8c91b285f7f3c8b9fe28283b51885ff621bbe0f8ee"},
- {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:59ddd85a1214862ce7c7c66457f05543b6a275b70a65de366030d56159a979f0"},
- {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:12768232751689c1a89b0376a96a32bc7633c08da45ad985d0c49ede691f5c0d"},
- {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:b19255dde4b4f4c32e012038f2c169bb72e7f081552bea4641cab4d88bc409dd"},
- {file = "yarl-1.8.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6c8148e0b52bf9535c40c48faebb00cb294ee577ca069d21bd5c48d302a83780"},
- {file = "yarl-1.8.1-cp37-cp37m-win32.whl", hash = "sha256:de839c3a1826a909fdbfe05f6fe2167c4ab033f1133757b5936efe2f84904c07"},
- {file = "yarl-1.8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:dd032e8422a52e5a4860e062eb84ac94ea08861d334a4bcaf142a63ce8ad4802"},
- {file = "yarl-1.8.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:19cd801d6f983918a3f3a39f3a45b553c015c5aac92ccd1fac619bd74beece4a"},
- {file = "yarl-1.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6347f1a58e658b97b0a0d1ff7658a03cb79bdbda0331603bed24dd7054a6dea1"},
- {file = "yarl-1.8.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c0da7e44d0c9108d8b98469338705e07f4bb7dab96dbd8fa4e91b337db42548"},
- {file = "yarl-1.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5587bba41399854703212b87071c6d8638fa6e61656385875f8c6dff92b2e461"},
- {file = "yarl-1.8.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31a9a04ecccd6b03e2b0e12e82131f1488dea5555a13a4d32f064e22a6003cfe"},
- {file = "yarl-1.8.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:205904cffd69ae972a1707a1bd3ea7cded594b1d773a0ce66714edf17833cdae"},
- {file = "yarl-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea513a25976d21733bff523e0ca836ef1679630ef4ad22d46987d04b372d57fc"},
- {file = "yarl-1.8.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0b51530877d3ad7a8d47b2fff0c8df3b8f3b8deddf057379ba50b13df2a5eae"},
- {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d2b8f245dad9e331540c350285910b20dd913dc86d4ee410c11d48523c4fd546"},
- {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ab2a60d57ca88e1d4ca34a10e9fb4ab2ac5ad315543351de3a612bbb0560bead"},
- {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:449c957ffc6bc2309e1fbe67ab7d2c1efca89d3f4912baeb8ead207bb3cc1cd4"},
- {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a165442348c211b5dea67c0206fc61366212d7082ba8118c8c5c1c853ea4d82e"},
- {file = "yarl-1.8.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b3ded839a5c5608eec8b6f9ae9a62cb22cd037ea97c627f38ae0841a48f09eae"},
- {file = "yarl-1.8.1-cp38-cp38-win32.whl", hash = "sha256:c1445a0c562ed561d06d8cbc5c8916c6008a31c60bc3655cdd2de1d3bf5174a0"},
- {file = "yarl-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:56c11efb0a89700987d05597b08a1efcd78d74c52febe530126785e1b1a285f4"},
- {file = "yarl-1.8.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e80ed5a9939ceb6fda42811542f31c8602be336b1fb977bccb012e83da7e4936"},
- {file = "yarl-1.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6afb336e23a793cd3b6476c30f030a0d4c7539cd81649683b5e0c1b0ab0bf350"},
- {file = "yarl-1.8.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4c322cbaa4ed78a8aac89b2174a6df398faf50e5fc12c4c191c40c59d5e28357"},
- {file = "yarl-1.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fae37373155f5ef9b403ab48af5136ae9851151f7aacd9926251ab26b953118b"},
- {file = "yarl-1.8.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5395da939ffa959974577eff2cbfc24b004a2fb6c346918f39966a5786874e54"},
- {file = "yarl-1.8.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:076eede537ab978b605f41db79a56cad2e7efeea2aa6e0fa8f05a26c24a034fb"},
- {file = "yarl-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d1a50e461615747dd93c099f297c1994d472b0f4d2db8a64e55b1edf704ec1c"},
- {file = "yarl-1.8.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7de89c8456525650ffa2bb56a3eee6af891e98f498babd43ae307bd42dca98f6"},
- {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4a88510731cd8d4befaba5fbd734a7dd914de5ab8132a5b3dde0bbd6c9476c64"},
- {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2d93a049d29df172f48bcb09acf9226318e712ce67374f893b460b42cc1380ae"},
- {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:21ac44b763e0eec15746a3d440f5e09ad2ecc8b5f6dcd3ea8cb4773d6d4703e3"},
- {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d0272228fabe78ce00a3365ffffd6f643f57a91043e119c289aaba202f4095b0"},
- {file = "yarl-1.8.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:99449cd5366fe4608e7226c6cae80873296dfa0cde45d9b498fefa1de315a09e"},
- {file = "yarl-1.8.1-cp39-cp39-win32.whl", hash = "sha256:8b0af1cf36b93cee99a31a545fe91d08223e64390c5ecc5e94c39511832a4bb6"},
- {file = "yarl-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:de49d77e968de6626ba7ef4472323f9d2e5a56c1d85b7c0e2a190b2173d3b9be"},
- {file = "yarl-1.8.1.tar.gz", hash = "sha256:af887845b8c2e060eb5605ff72b6f2dd2aab7a761379373fd89d314f4752abbf"},
-]
-
-[package.dependencies]
-idna = ">=2.0"
-multidict = ">=4.0"
-
-[[package]]
-name = "zipp"
-version = "3.8.1"
-description = "Backport of pathlib-compatible object wrapper for zip files"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "zipp-3.8.1-py3-none-any.whl", hash = "sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009"},
- {file = "zipp-3.8.1.tar.gz", hash = "sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2"},
-]
-
-[package.extras]
-docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"]
-testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"]
-
-[metadata]
-lock-version = "2.0"
-python-versions = "^3.8"
-content-hash = "14a6a2c0f9fef311307d7349ac693da64b253cdc8ec36a3361e10f991b17de47"
diff --git a/common/data/pyproject.toml b/common/data/pyproject.toml
deleted file mode 100644
index c7fc264ff..000000000
--- a/common/data/pyproject.toml
+++ /dev/null
@@ -1,23 +0,0 @@
-[tool.poetry]
-name = "data"
-version = "0.1.0"
-description = "Casimir data notebooks"
-authors = [""]
-license = "MIT"
-
-[tool.poetry.dependencies]
-python = "^3.8"
-pyathena = "^2.13.0"
-boto3 = "1.21.21"
-python-dotenv = "^0.20.0"
-s3fs = "^2022.7.1"
-matplotlib = "^3.5.2"
-pandas = "^1.4.3"
-requests = "^2.31.0"
-
-[tool.poetry.dev-dependencies]
-jupyter = "^1.0.0"
-
-[build-system]
-requires = ["poetry-core>=1.0.0"]
-build-backend = "poetry.core.masonry.api"
diff --git a/common/data/src/index.ts b/common/data/src/index.ts
index 49667d698..46da978d9 100644
--- a/common/data/src/index.ts
+++ b/common/data/src/index.ts
@@ -1,34 +1,24 @@
import accountSchema from './schemas/account.schema.json'
-import accountStore from './mock/account.store.json'
import actionSchema from './schemas/action.schema.json'
import eventSchema from './schemas/event.schema.json'
import nonceSchema from './schemas/nonce.schema.json'
import operatorSchema from './schemas/operator.schema.json'
-import operatorStore from './mock/operator.store.json'
-import reshareStore from './mock/reshare.store.json'
import userAccountSchema from './schemas/user_account.schema.json'
import userSchema from './schemas/user.schema.json'
-import userStore from './mock/user.store.json'
-import validatorStore from './mock/validator.store.json'
import { Postgres } from '../../../services/users/src/providers/postgres'
import { JsonType, GlueType, PostgresType, Schema } from './providers/schema'
import { JsonSchema } from './interfaces/JsonSchema'
export {
- accountSchema,
- accountStore,
- actionSchema,
- eventSchema,
- nonceSchema,
- operatorSchema,
- operatorStore,
- reshareStore,
- userAccountSchema,
- userSchema,
- userStore,
- validatorStore,
- Postgres,
- Schema
+ accountSchema,
+ actionSchema,
+ eventSchema,
+ nonceSchema,
+ operatorSchema,
+ userAccountSchema,
+ userSchema,
+ Postgres,
+ Schema
}
export type { JsonSchema, JsonType, GlueType, PostgresType }
\ No newline at end of file
diff --git a/common/data/src/mock/account.store.json b/common/data/src/mock/account.store.json
deleted file mode 100644
index 6f79e04cb..000000000
--- a/common/data/src/mock/account.store.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- {
- "address": "0xd557a5745d4560B24D36A68b52351ffF9c86A212",
- "ownerAddress": "0xd557a5745d4560B24D36A68b52351ffF9c86A212",
- "wallet": "MetaMask"
- }
-]
\ No newline at end of file
diff --git a/common/data/src/mock/operator.store.json b/common/data/src/mock/operator.store.json
deleted file mode 100644
index e80cd6f6d..000000000
--- a/common/data/src/mock/operator.store.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "200": "https://nodes.casimir.co/eth/goerli/dkg/1",
- "201": "https://nodes.casimir.co/eth/goerli/dkg/2",
- "202": "https://nodes.casimir.co/eth/goerli/dkg/3",
- "203": "https://nodes.casimir.co/eth/goerli/dkg/4",
- "156": "https://nodes.casimir.co/eth/goerli/dkg/5",
- "157": "https://nodes.casimir.co/eth/goerli/dkg/6",
- "158": "https://nodes.casimir.co/eth/goerli/dkg/7",
- "159": "https://nodes.casimir.co/eth/goerli/dkg/8"
-}
\ No newline at end of file
diff --git a/common/data/src/mock/user.store.json b/common/data/src/mock/user.store.json
deleted file mode 100644
index bb4ed9f3e..000000000
--- a/common/data/src/mock/user.store.json
+++ /dev/null
@@ -1,5 +0,0 @@
-[
- {
- "address": "0xd557a5745d4560B24D36A68b52351ffF9c86A212"
- }
-]
\ No newline at end of file
diff --git a/common/data/src/mock/validator.store.json b/common/data/src/mock/validator.store.json
deleted file mode 100644
index 493df82b3..000000000
--- a/common/data/src/mock/validator.store.json
+++ /dev/null
@@ -1,110 +0,0 @@
-{
- "0x728474D29c2F81eb17a669a7582A2C17f1042b57": [
- {
- "depositDataRoot": "0x7f015dfc19584b9ed78aa63b2633ed4874dacedcd9cebd35aa1f3a286b86c2ea",
- "publicKey": "0xb82225b10959ffe81b2cd29583ed3086bd78dacc3f87b6e59259ab2c8f9e462a302bf548e1525c5db4502865200b14fa",
- "operatorIds": [
- 156,
- 157,
- 158,
- 159
- ],
- "shares": "0xb70b8ccaf8627cf16adfd75f228f81432b21235bef7ca4e5750b2b95cd444a86092e4094edaf0365e69d8cdccf937480182c97286fab6eaae460d19e01a3bda8a6ba66ca3b3bd05e97edb6652b89cfd8d0c63c6cf8e1a085e18a271301c0ab1694a7819dc29733b75ff227aa04bb4c95a04c4522a6f1b4c2552bb35f1dde0cb2609c8c0c8b297290c3f4ab9d6013422baf1d7a1109fdbed050632aec8730529dc16e6b0365a87da72dd2aa6c763ffdac09297fe0343a6a615be1300345807dc6a3cf0e774c1078c8a815213db3023325456674e5469b364abf5dc534c8f53eadfdb3c36bf881268195c5fbcab5523b03b9b6d322af21dda4922e73a3ed8ab7747c622e22939dfcb9624e9a07b4ef761bf0d381acd45c9c14481977aeee72fe080d5b76b9d427d8e1c020e858f7d97071e0e0d3a362d6fcd3bb40520e4bab8ad1a021b78ea1d46cda64bdcba91935fe94806c94b1c5957e4ed42121ecef5e670ce3aacfb8775526591771a8ea6a754379747afa7162d3d4a9be79275e8889903718d95aadc4943a0a0c2c4e6b4fa2b7f058ca6028ac5baa30641f977856854e086cc0cc8b850e78c0d3457b2c1b43a0a718c39f2878b0ca3bf82265204934773e4ead6a5245fb54ab99635cbd32910f57c3790f3fd3d34a932e0d9405dfd8a17db39f1cb559e0f3cfdd9bff7863dae8f2ca2599c64b8e6d24f050350d14c4bcef2d090a247e8fc85c06897ac35134b035e64e6585fb61da7ca37985e9bc655e7253edc4f821b1a4ee57c069c6ab40c60aaef5ff8b513b9039cbdf9ce1c0801607fc0f2b9f023e5bc94e43e7bb5dbf11688ee407d3a180b4e1eb31e16ccdcdcad14bf50c0ac2d6710d4d34bb44a6c5eb270bf3ed81313a85e19846bdd3b54039034c36c6ac38057c3f0c6cda11a1720174ed8e81c8b8b0c3f5cd49b66bd6a245101a63f378a20074eac226602fca453b61300b3715081296b3ef4a48ce4d357272cefba661542bb6ef163584dfd4a091a6bfa491c7b76b9f50e2d6e2562c59cabb7e561b5f3c04161996bc65b54d50f93b27ff0b0604721fa1cd482f80e685e9a357fe27ae8eb5419a1dded99b51423b79750d2cd97ab0595835f713b0450622521b21296e963df98841531348d592d48570a0869872ee0535956e00857b7ab71c43f9f997c78b0890cff16783fdd69b324260e49d7be8c484ca0f7ced21ce020da61150cf7e270dc0282864dd339ffc221165c9378fcdc6c21dc0c52b284a533993b22056e2229f7a472fae5fccfdb8e7d980554acfd64caa922beb70574c329bde6c32cb754122748ecb595bec0936e7a81453fb1e65fd0bdcb87aecdf55b5d9776f9405be198e050be8c7cc8919375a992b47364d8ab11bf57fcdc3bcf8a2badb82fc6cad0c4b60f0730b2f84ac53687f6124913fd5db5088e0f86134547cf372f2c17946387fd84a7a257b3d0523b5ecf1d1e8f4bd4cac17e0f089cf750d0f138aa02b3ac5ffec144fac312abf3c1dcc04519a8af1801651e751affd1876ddba8855a732d0b71ce9a3d4eedf2a23dfcbbb07aed4d792ae60825fad355063b1b0ec68db7714a801be3842330f64c4db543a0c5b1b425a94686e0729702abe92869e5d9495f497cc8b2e42e8c4207044ad00578a34f3c876651e33e53feb4ae10fcb44a9b0f52bad53bd00c4697b96e111bce70564016ecfbcce63c7ad354a24b1cdf0fc8c0e72afa1d1c685e9fb3683166c076fc3de3d4d0f9d5b50da32a9faa0a502a2b75c488287d624a8e6bf9929a322e9ee1dbf6b7344e3c496f6ed9ef4b4652843efa12195259a2d75e50e8092d9a9d088bd969c5d1598f0b145e70ed9",
- "signature": "0x94d1daf098db8aa66fe0b8f72e989b2c6c48eed03992d994a009d5edf079859d1bc6d0f9ce184f65b7bd5a1a8ce1f9a10a4ece448f26c4c96fb60deba9b5262712d91f80377ac6e08f968db9d4a870e4da428d7044820e9099514924c41a3510",
- "withdrawalCredentials": "0x0100000000000000000000000608e29035e1473bC06dA28657Ac84EC0c7C6Dc5"
- },
- {
- "depositDataRoot": "0xcc79977d1ca98815d48000ef0335425bd962affe0b0f62a1e18b1b593480d1c9",
- "publicKey": "0xa0d09f5d9d3cbd119d3de3a14bb6bb1bc9c5237d1a24ad280c962fa1f394e693dd951616aeb6fedecb716e8d2b60dab1",
- "operatorIds": [
- 156,
- 157,
- 158,
- 159
- ],
- "shares": "0xa280a4b20b0258efa6509ba64cb98681c4b0ed64640332463489f4da64a56d9561a07af45389d049cf600869cbfe9cf813a746ab30f8028e7a6e4b13e106a32b2e8179a2e7d12ee2dfc0e309d8737bdbe485cc6f8f9e7c0b6ac8c07313637dd49682422fa8768bc7fc5d88418cb17566f4ece4ec1c44c0daf0e9069481c53acef96942617bf55f7efde75045fa57899db21e8eb0ffabba04f558b33322a755807e827291ef5d8407b899519d8929bbb6beafe859f869941bba0b192ac48e078cab7c1946d33c50916efe290b05e582c7d3e890284471d6e36f2e967ce9896600991a99a5cecb05ffb958aabea534d0f9b8388ba9dd71290e00c37209af19823cff468f7bc84dc61e9940d6eb9cd9b0dad14381452faa15cddb368f1266d86484b70d3c5777c541afebb29bf59d0a71d7e04c7d9d9a816fb9e0b83f2d6ca98e3fcbdab10a6fcbb5f0c255df9b5683181c625f78bc9e200e3ef043fb213882564473be03daaca2078d6d1a34e491f053f56e48b1ac166c17896c544103fff4fcfb64988d0e1916f0dc77e224542e56244a37fbe7e4d09b8a30146fe083055dea3b4fe648e7157f1029aebc21544aebe7d1be1e4120a10fe6912b292f2d49a6909936aa183c7b794626f586c4cb8f1f6d11ea3b19699a8717278388880384ca7ccb8838c2e47f0e81e6096f938d0bca7db5b51b33804036f33a034ffb31b11f81919184e5f1d4998ba0da69d96a0412c6607e65217e4db8747e28f5c47ac081893a854894703dace89fb67bed28deb7c0c3cb78e0458ff99f6fa1d1efff1c4a3679076d587734436481cd5cfb480e2078cb34a116c5b0aee0feb25f07d71428b284fd7d810909704cb2eb46308251f11ae9283635b052f8620c057502d183dd6c613a9da31edb1ad37a37565c5b75035acad3b75d3c7bad9d22c9bb388d872332abd789a840969e41c664b627d1b192d4a7a304708dff4f3908615b5adfa3473393579a74bb7d1b0fa8b69d48e7026d45493bdc0e5e07620997b7f193222b1fa9938aa47643d6879591ec4f736097ffd62ee4c9fe00ff2cc40126abcd1c14bb94291da4b9439c48a0a3a95b8f575b3b173aa3a1f7d58ca5189ff3df28968702e79574fee4db7a035ce9f55c51c1d2b44d848b02aa4ae475d1d662eddbdbea25ca48d384cd0747b8c3962637e709e182f950178172f4b469bdd86f08062dc8dae1883a2bcd9bfc04d8b2f2e444db2899e17746549ff94f8887c82bb1fa639ec931d362e40567cb056dddac8ab5ac1f96136e8f4a3a71520ed4e0137179f3d3ee25d11e622f30f78cdb9acf0734395f61bf91dc9ce858f0d3ab72f19e56cae7f37cbf26cef3b6e1fd7ed031c079dc273207e01aeb59d2772465cb5f1b0ec1c21a975a20b767a977fb097cde569e8ee5b6d0298429e3467ee38610cab1efe4757af059abbf85d870c313c916c3ba60111abce27b6851b8c48f11e2de7d6cca1ffcfb0c55b4e4936ded193e363fec574950b4801e2b931c0d900acdce9451fec98b17c09bf8c56084815b3d95c45521e30877a1e80fc1bc0f725c9bcbefcc3db99b7fa0e6df82faa66672db8e80a4b91a47ef6570d975641aa9ab00c9e6c844cc5b6739cd32593f79081ec26dc74ad9ba4a49766b1b43c451c0b5a540eedbd3ceb42f3c93a17186c20a3be5b13de790c1e22f77461639c6ac19e1a2da355c40df79ddf004451199e1b1b3c18df0a1db9e352f4d2f2d6fb63bb0e6376b463796781b3d2482ffe021727b0bc87fd0060e585c1bdf28434fe15b41efe5c2fad6881291264c323add6f811b0be17439e9f1c3c157d3bb990d9fed272e2f5e80c69e16d93e96",
- "signature": "0x8679dca34563d50bc2c5d679b7d5b216e1d4dcaab35082665a5d3b4e4ed9301e6988b4fd6ed0fada9783f42908285e8f00b8cfc0522c7c22cfc917b8beeaefb669393adbb365ce5b2864b0379acd0ab116e1b9ba9cba8771265192c3ce81d553",
- "withdrawalCredentials": "0x01000000000000000000000020AAF956520988cD1Be05c49fdCC41FABBEDc6CE"
- },
- {
- "depositDataRoot": "0xc9e658b733c107ae5030044290226cf3fc71bb3995696df22eb97d82638491cb",
- "publicKey": "0x8e849b6b245beb56ce9f89ece0d244e7d8e3c730d27cc9a4ebcedc8012d3d4fc0fc231fe4313fd7fe06e81e57f768799",
- "operatorIds": [
- 156,
- 157,
- 158,
- 159
- ],
- "shares": "0xa8df1efabb303db62b3d446077d5cc705c91caafc297aef1ea4b76d3f9694718b4772925b69167b37036cd0417966a820cf2ca386eb21a58aac45f012e616ca9da413d38d560d973e18a903a0adcb56adde4f8dbd0d81eccb1fa9cbf4bed98aa95e89552d1e0435e3404acff0ccee2a537faca1c4d391675ea57034ba4a51b7a35f1bffb92500d159c490aaf98fac921802f9d25b256c79982f35b353900619fdc40df6de6fe9f10fab909da8b8507778ff3f287fdcdcac5a6096107a4a24a0d8bb5c9a347d99b0f41b48d4ace9bc1ca482bc739feec310bd1178644d21291fb95ffc7f117fcb13ec825d54ad7e10606a578b40c88e7c66b25595b299753768cf716d2e1c8b725bec8975db7a4fb872717e50e2526b4573c826596d2f48ad4e87a5dc83706aef3e467c4bbc8c4f13b2b6067f7689e5077ad71aa72c9a5f5f38f0f37a6a1f083c5d34fbf660bfa0d9c63ad7087396e6b5806db739a7844f756c9e5801e7f05568f7ce3838cd0a84d6782066cae2e037a5d8a5d2c35bf26728eb99ec2ca4ff7464ae0b25a016f288ddc2332e8aedbe970f6ae309d493dbfae63bd707b57a718e878f8f8fdd3afa816e28cd52385b53b79d8c324e0571f5b182040e9ea419fed5bb7c0a65b013363dd4159076a0402a4e4e18732f885aa897a6ba885454bf709f554e4927013e4e6f60a9eef5cab128393d71577164ed8acdac4a63a1a3e9f9aea83f1cd0c50817111f518eaf184048cc7112273e4f5a2cd34df494b47145de63524d80328e019572a499fbf0cbcc7624764148537893fbbae5099fc4c6041eeeb2d28d97eb3e418d74d8dfd42520b1b880f8530a20c2ae1e68d37ea18974be8cd335cd7e093352b369a6ee7d38f9c3f57d2afbc01072650f9ba59a61a97d746bfda052fbb6954e0dfb875dfa114555f6cb33c58ebfd04e0068938637137b90bed5b15020b32d5422e4074c1f62c4ec95b367a2ff73302dd26e8f4f453a27c313aacad518596968e27a92fe47436b51b04b95840a8ed08d3d2f9b8330bdd2406617d84bbcf4ba653d43307728ac49110b91a97885dd5c1a6d5b49215084eba63a543b2048c70665c88f6f858032cf088375dc3f9d5f8122ec4106a480e7aad0db62b1d05470e47124e69c158e86346b219ac462ffc72f9cc77ab02a1855599f1085f3ea6e3214b8f3114199fc2bb0be645ac279f817e978e9b8746e2a3b31af12d66c5aa9fbde3d9af05418de4cea41a860a2cd5abcc64a49d0920ae1e7562433653905443215aaa2c29e9ffd21eb579fe7f3b93517bc05ce4b3f9c7b17c5bfbbd9d4b08807486384b5a7ad9cd39300905c3e270c8c254bf28e514559bf152103d7e09d5518b6392a16ac1566ef1218ef2ba650e8aa873e7c251430448ec3e2e119540ed4f724a390db8d0d5b32156d2c2588f900426e995eba4c59d8eba9ff02debb2bbcc24bd650745303c5b910be9635efe677fb120a36218043d15fe32ee0e9f3db02ddfed31e8a7e2607c6a4fe6f5e1dd87ac136c387bef4d44d431e04aeddf6a68002358257688d103432dbc71e3d90201de50a935da791b0c2794084ba890b4094a7b5c2692485c8d0228ee2569853818e8a3a326433563fa44d9074279ddc53b0eb866de3bc8663e6f129524ef0c80f4c7647b8497a929f6157092320b71b4551fa87a8abf43e2a5ff120f9e170c4320e720970a6ba86765662a143fc9de26b8de3af78af9b69aad3e49433d6aa041cd16a50dd49e987c3b07f5d74d644cbc281a5e585c3054defd9f5d6edf70b79a8acac291edb5e9a071649c514b4eea5dd2adcfacfd6925316863d49fc05271c70811ef4aa18b4ad9",
- "signature": "0xa1d956dc10173ca6a6bd79d5410641e214855f4462e90af7bdc7842aeb9340caf6682371d967c22d40207d389b5d3c6a06a4f94b82792640bd54bca598096790b615efcd4bbf754b9ffa5843689974cb7bb1359ba452bd48517b96684a827147",
- "withdrawalCredentials": "0x010000000000000000000000608CAf3aaf623E0dcCb1EA40Cf2d544094a9Fe61"
- },
- {
- "depositDataRoot": "0xa1263e2c112620a29b57997a921a53915b1fbd3fd699c7fec24bc525680d898d",
- "publicKey": "0x95d84c705530916a6d1884edf7c7d279bff502d41ecc9dc18a4814b0e98ad5b6ba568fcd28c7a006b24065c0cf1a041e",
- "operatorIds": [
- 156,
- 157,
- 158,
- 159
- ],
- "shares": "0x8d0fcb92dc352ad75955a16f8c2762145b4f3a997d97bee8ea877bc304d16b2f2ce6d691f25d5f6ebb812e8bbd8ad1c90bd8e79747f7a97527bf2cb09bbef41b6465abe12df743b50717a292ec7919199016bf77198c7f87424584962419a248b327e81cce7804ea91f9cf98faaa68eeb9ac0103e137b2aad159c8cde557402d017ea914435c84b26487a6a3ea7ff3318463c7dd36f59da0a8f69c4517b7bcf605214097d03472379e8d4f120bc3e6682aafd4481c7a5980cf1b75f2199b0e0099b5fe9e9dcfa85e4fd2eb56e6837e4e6b772dc83c290aa7030b4528d1b78d021689721ed2f0f7371fe32d5fb856a1e8a58a9d4fb86db0928bcf5b67729c144e953f576788b37c66a1522e6dfbc898d333c0ff636662f2db6e4521f2dacb4cfd1a68ed080a80aa4302c1b75af441020339e9f9f5ee0deb50739768d064517eb8945915c0fa7f5bdc803d1934550415aeb445cbb4c30ee84b2dab1cf5457448513d979157758ed63d7dd1e0c59b0fc15b2e85137637c256fd64cab6ca41c607bc20cb202239c811910f2859c0ceae43233207c2db95845558d710a45288d74a1bc590aa3d7369b90a004310bd231d94a31d5e7292d2c4b16a0200c45e74ac2360815f53bdd34a21f9597ab374ff23959aca6a4b73e22f59affa5ff4fb3d7c946c9d6e9f20506b257432f34e65e53189693d71ac9a3f80e832f6f12e330357fc8efa746ddf6d8405dfcf1d67ece6d6fc16a694b84ea3029aff059b6386e32acd5731beced9a445220172f0a66d8b4950924a3d2343d7adfbc9063b05bb0112534fc570ac7e78987fdcbbad27e015dd9d13bd820283e8dfdb2c266b55a7761aba9383dad1a81f8f525ee36067629d9923713289b11341f48a2ff22ea76747a7cef7c56b51fe1a540efada538488f360d7ad90342499c62e33e62670098a24cf473275597a4016ec56add75d93a942c8866ecb4b85e382c561ae1ccf226fae2e8f098b6d57439d64119d4674876eb28d91caac47965e28605492648605e7a3bfce9e7e0ff53e8273bb00b0b74555f55c17e37f85368323ec604e00cbdf186d07a3a0d8d51d6ed2a622c7fa26b889187d1b21318e5bb345c03e006b468f1781e3cfdba397774957f76603311f57548331a0ad13ed5a133b6a0182c34007de4697ec2bec01e1d9fe64128383c763190f9771e63de0e6acec0ab641d589ccfb7e4138362ca4723425528cfd0b579c7f00a5825df98a6fbac1f78c2ff451c8905f136b9f92ec5f9f3982faf3dcbb3b794d6f1e9df0100e851da61aa7769b38df4216083797c0dde24ba9dfc5522de1e9562cf3ddbc6d447611a9e113dcbcb1a64745db285dfa400767e16ff1d07a749d7f22e0d7b79af241359ce99e39c00dcfc9b1aa99171b24651f0cc08f0eb056e61270727bf594041d1423326b49710cebdb9b51731b9cdd21c5acf660d23c138f2adf8528ce3dfdf0a38819c2b3879412a6d423b00c96c6dd88b41e30743b6cf357a7e6c47046c4c05d0bb7cda7256a83c4daa7588589a7380ea989fe99586a4928b7ce26e9bd1686aac6cfd84097a763cad1222077a4d57822a039ea219dc7c78ddfe3f34991008d25348a42fd24418db7e9546b0544fd580242c837a1b9355bf4ee86d4234f7371f34c552ef105e0ddacfdfeda9d91caf38dba942738c98b54782a6733794ab6bc65da9c20924aa4f508b8e5983f3dfeacc2e96cdb4140f75f67a188ecbb57ae229187de4d110f5a5b5046205d5c756c8ad8ec6edef1620e49a03e7c92f53dc25c2ec0f294cc8e50f4dcbcb18066e991b727a0d80c98b0e93f62e18153bc025dfbcf322e938ab4205abadd629b",
- "signature": "0xab15809a50d862519d8bdc2d2d936d2579c55e2cc88fd19c73796bedaeae42feb4a9e15ec7bd5d087f6502d7fce003d409054eb32590cd11c8a25fb28fa83b7088a14208cabe3104a4bd1171bfd3f1c94036d32ec92036f09f2094b7bdb52bf8",
- "withdrawalCredentials": "0x01000000000000000000000014B15017a2Cbb28EF5Be787ae8Fd32c5abCB8dd2"
- }
- ],
- "0x0086C88CA523F27e4bD7f233bF7C722154757044": [
- {
- "depositDataRoot": "0xf8f610feb4b0f8cd0a26ac350e002d0464e54d70249d517ac66317b29fc9b1a6",
- "publicKey": "0xb5c4df5bb5de73c4b9f8ec701095e4993e86670c861a7ad11a1365175676539f73ff2e7ea017c88be05d420f8dad667e",
- "operatorIds": [
- 156,
- 157,
- 158,
- 159
- ],
- "shares": "0xa9cd17d4968ae5be8e316d7d09c3c22b06f1d3728d65f1740e2ac786b64675501dccafc7963aedd45372910506ee3b66002b41128fe117c8d1053c4d871ef945a7883934e51a21aa12a8178f528733dea9b1266f0628b05368ec95694dd2a1b2aba631a81fac70f87cfbbbe14f0dad57847b1693edf2b7976084727d51f3ffa1d4aa52687689d5508fc31bef978622b290cfa4f3194e9d3b3d40248aa83459d4d97ba43cf1b2bfff1e2d40e9702bcb91f4f1281da851e7a644f8a38f89e4bdbe8e89c843025781dfa1a30ce22faa5db0d116604d8780059f6f91b06e9f9588c0ba2e84dfee2ca885a0e228e02066a9488bfc3e28efb601481407a84cdd23d6b4f797c02781cf0f0e2c9dd233d8a9697fe71df76b46a5c004da54b1627976a29429c55e014f733abdade651fb32815d5ae2bc18fa2e7c7c79887c3563f7164616a23b22e6b4ce2acd3cd1ab46c5e41783eb36e230c9ef7af02bdddd11b56518357274b6da59d83c03c5f5b83ee40020eb9625fcfdeb5423e934a7936e3567c5babe59f681a0758f1b7ae5704f5143c11a4da1cc0914042490d70571e0efbcceb9ddc86addbbb49266059555d220277ce37e6389b6ef32101988aa22b384c2e69d1a002f80703b1729605543d1bc6075143a012c1c93d761bdbef7731cf46254117b9eda352c06531d555c85f56e0a20b3136ce2067ea79a525e0bb19700c3e7dfa2a8a7c2adf9a8e678bb2f41c70fd01e61ab4bb523d0b18247095b5e4fb8db6d7c164d2bcd0f55473ba09eaf4ba38eb4b4374de2bc15ebdb8ab91b8533a76ba2432f934846205403658a69cf70f3f2fef497d6727459ccb41f0fda967e319b3fb842953a42567f5ec437a5015d7110d9cc6230b96a45386805ff33b3577041d2ee924c63f2662a1c3f64b775327bbeb1a63d29d5184315816053b7dd91ce18e5399b831a27eb3e2b720e907b97b0441e6154d4c214d7d2e4269484663be11148696e7629ee0984c08ed9ed3c098f6c80308b72f12d4a25824ac9c74f553d7c63875328543e31d83dbc97b9d35c4d7736757a3998ac19023ffc3ecca3481e2778fbf8a8c2ce4c235456b1c28db20e06f042821478cf26d90d7a33f02903914f42326c97e6b008799a02a0bea1cda368fe03c536a73d7303b8cb9b87716176ffaf71772336336023b7081340d38d23655ac7cf2dcd81f205f196f9fda8b0446c36644cf0e5c9a31ae62ae591597e79e66b977dd68abb8411a2b509862b3bbbf56e29d10a39509d246dbe6edcc1212dc71f73da67aba28a0395957df36ad1b65572695ffca505537d72689fa8464a6ef42a412fea004c6f63e60f29e0519593ac11bd8803bbb163f0d242b46794a4646d42fc9723e5fb8269380bff02a3b89f52b6c80717b341738fb3598748cc2db2c2ac4f89ac4fc4ea2bebd6cb009324028d92f21cf8883c785a6c1a0b2250452b3c46dc86116292e90a1ed24a12f547f399b497db12c0d3aa3a9c028f32c023c8cda8b22f8936872db94722a456fdfcd49e0bbeb5b56cadb1a7e549725799a4da895afe1ad71ca0c896e4c50cd1f6c599fc6de30ee7d28f2d48e6b069d8bdb8e5abc55e59dfd21a9bdbe9399aa79dc63ca6b3af885fbe289a76ddfeba7da2b30fa26ef522ac583de68f0855fd8a3d8e969478d9bd1469d83629ff9e2c6ed78939545050369feff516385c9eb3fac7ded8f9ef918517938c2b20d6f30c19c82f142cba48d13df25b7f916aa884d30b51ad24ec6ae2eb95378bf43244659b9df1eec3395522a948494756ddfe6e471a70b730605a22efb13690d37341e86d1411d586599b5fbaa4de55b7138ac098fa948e304f",
- "signature": "0x91293b3b7ae03d02216bf6d165a54d43c03da5cb7fccfe36d699372c2780be0096e415d639cf8c1e6fea1ae60302f464154e1c35690504c365e80c08faa0216534832977d31a97e2fbea2a57f53d7524063a670857a504721a2e2cb80979d4bb",
- "withdrawalCredentials": "0x0100000000000000000000008e21130B26d72298600378b359F24EF22415c528"
- },
- {
- "depositDataRoot": "0x801155eb7f02f901d8a6b492835c49bed67d61eee7a5e5a9747e6ca11da9bfcb",
- "publicKey": "0x877df8ed78b0be6fba09e8be7845978cc7aff8c67e72d5369402b555adc4d935403a4e74ca2faef06499a1057a9bfa45",
- "operatorIds": [
- 156,
- 157,
- 158,
- 159
- ],
- "shares": "0x962a489b4805d8af73b8bd1036c09317f74c08ab118efc73553f3e0ce8ec64e98539eef14f2cd47d5b66167e99d2a67b13787207d4a3cc65d4562019a1dc8a193bad0fa46dcde860f65bc71081d56bd0933bd773ee00253c4101012e9aeed6e39004ebaeb504f0d1fa43a05df0cec9d23385b86062a83945ff7f8dabf2682099b3ee9b63e0ce1c494bc058530dbc4a73a91cc23af051f5d3795cdaa169e882c233b7e24f361e6d595779fffe947ad65469c74eb8b90f26d3761d39e7e9ba66e5a6ffe9c475e21e3140661d06210508ad12e50e08efb3aacea9fb0810ec5fac7a071976245e077a939c6080cc08f016c4aea375753ddd195b8bb8801df9cc1e0322f4d6dcd1f8f5fa11d72274915d3be3a9f8aedf3137a082e3684ee210a3ea1514091b47c290d2a3743e1226574cd9f59b951cfe2f5a68206ec4441e608e9df343e0f08c8917fc23a53e5c790f72b4fc7579943a0f47aa8cd4f1bdcefe4d254e5c11017dbbfc17b563ef49ba56c68fc82f5edef77c67b84f16f3681daea7980a6249db0ce8ca84d76cec4bb9e9dc361d9a14c7178612277af25887c41de41f97e544c660a6405e72fb6d3beefa8fd05027da27304d420680160d8b9e3c9e185cacf954c236c6fe74e927d2e5b2378228a88c7443de1610cad03979f9259beb2dee0b43045b558ba776bd8747ac91bb2eea6642742e69056e1981cbb2bbd1e6c09408724254aff901c9e5ddbac101f46ddddb1283c4576ec974f49dda0542e2a186aa97ddb9ce23c6b0aff760944cb504f9f8d714fa61dc5fc62025782dfb1616cac3f146af0231f1cb892420b24f36a536ed9d3d06af9eb778657107001c9c1224feb9c866d333d28ed84243592bf1f601df9d00e6d2e2d55028ec64f85a0922c6a21f004d8394799b8d824380aeaf9c16a1a48e2510e63b1d80c305c3afe032702ef03e29781df5f6e97fa2a95e99eadf3187a59bcdd7cd2bade5f85de5daddcba84c028e4a043bd2fcbf1e9a3d8664ef864363f5ccf52280b511114ba3525bd1314dd9a124c865bdea69f25bd4937cb00b65f52ad87aa8a8613cc820668fdd6ec0c363bc91cc77eb01646926ab0fcb1391e12c4ded77b33769934fe9dfd4538a247fdf424f34274f6dac0b60e9f6d5bba4e0eee55c7f70d60afaeff0caa99aeedd37de604badd605581093794e25900d21005577134030e60c98d696665ba3c10da413eaf94e1cc959b9de73854e879bd94abaa8d30e5cb2104b4781497559055c2e872c1a3a7d6d9849e28acc6f5d1edf6dc8774bd53abdd59a799fab0bc7ddd5e994a1fe12d038540b42a0c801931f1c4e1006d10a77989aef34196469c2cbdd7c9b401a01ddcdea20ca600e646cc9fd30b7a88acb6fe632029bcb63f04adc5cffd8c3186ab8c54fdd170d0f4121202e02f9cc72eee47949447b81ca78d65cd19b9c3497099e2899e92266ff0a35d37f1a308e09b880e9cf543efc6c2eba01ca60ba7e50564753aa4232b16f6a43b00c933536b2f2294618d76d4f2906a1bb113c254522ee49069477e56de40d75cd1065ec913d277a586bbab4e48e5a8552a8a3de9e8583759625e98a973137ba38fd4fb2e5f4fa93122f235dd800c555e9ce54beb3e66cd3791c0d9056d1f10a5c9ba809eae78a21ff8910bb53bdc936e8f85903eaf1f71f674676937394afc6b63662121b1de894d48fd7441d313df8d8bbce256daa70906906dbc0e21818cb970c8cbb253b2fc4739b2172b4566007f0e1cbd0e5a9602ae589d443ae57fbcb8b45e1e2814f12d7910872008fc8cc93b36730f0e58200bfe64b75b79c48b5c8d8e57691cbf98fcf1f50bd9752a88129",
- "signature": "0xa53db315cc4c79d5d3664af7869e854148440c735825f1441f0180f69869eb104d40f5f03477035117992e0bea0a0f7f166bb9b2e00152095e42e59b2634d281d0b3e1bf8b116a35bd2d971e63e380219d2f96c522734e3d5cbc9f5a3dac4c8b",
- "withdrawalCredentials": "0x010000000000000000000000eF059dF731137261f72D65e2E00e8272dEE83648"
- },
- {
- "depositDataRoot": "0xc3493c9e1efae58c14333ce7e6191e1aa3104d9fd2a4beb8ce2356217d07c8f8",
- "publicKey": "0xa1ea2ed6dd60f507272e9330e96fe6b104e7c998527108c98b6ea7a4ade911812fc97f3ca8abdc5bb382bf711324941b",
- "operatorIds": [
- 156,
- 157,
- 158,
- 159
- ],
- "shares": "0x94615bf5b1d171e25bd432c3ff4421228acd93bd8eea4e4c051c7f6bb6a3f304c2e7b0562421987dfa68129bebbd16d908ed04e58a50503be51c985efb324f0da426f68553b1dee17aa26f2c6fccc887b41b6b2fb7ed5f17d6e7600f7d1a26f9a95606a417d7168ac63c787d0cb7e8352334f61e7b9156a3365434a1d7afb0b820fe8b376ffa1f2264dcd073351185daac727ff2f9607333be5bdcdd659b74c86cc99a82140414cdc1549671ecccabe56a8666cf2e1de8a53f9d1d435dd036e7812110f94df5edfa8b827e80c1606a40df90327c60e38a92369e8790307ff8f8a3d64af2cad86790f20f6c0312ad360f940532ee2a5965c0181890b6846452f7404345a60ad3b037a11a62f7f703d5b4296be515a8829458e667a8335c1d36128b6efcee9d0642ce737277729c2e1494df5ba558e0ea681ed84443034f252d886a9ee30a730eb8eee7c62e02caefb9215909f152fff9d6f282c4afc80f2e7baac8432213c428eb963e1ec19c3c28ec0d2bde4e83353a96c73af8fd1cf45eba5ce37b2d85fab5326f4b54b1bd7fa85592110f80e329e2a7dc0b810e7cf43fcf7bec62ec1a23e04e1bbb0531ca2385435e94a09848973684661c108ca995422651b2ee05de38f737d301899e62d780259aa42f31cc51b950c5bf15e5e0cc9140eb72b0fcd5543ef0414323afd67d0a3ac9a395c159a3f6c362a923f00fe2c51069e227413e1d290ff0fe671450e1083048e3b8e660460fe264a3794737f7629baa27e3b92c21dc19c5d1ebf1ca5576ad5b358e071e6e680ec6f3b1dd16a33d1cec5e5bc482adcce1caf88f98702a9ff74314b4165e75c0ce7a062deb062879e3e1ed14d9cbe4cf4a86aa7f30193422592c0a8b026baf31ddeea6d13897e4b858c5f484e993357c557b5c2abfef258ee44fdb33412fd71c4e09886da879d68fd75a84fb9defbe68b96c3284a8568cede2efb4ce4fc4b6d896b0c68f50c61836ba43571af6067a47e8cc961978ab1281062bfd8d09bd4c5e24dbcdcd8627c2955c80fb5a9402338bcda6bcf1ebe2a232b33d357d510623a3c9b6fb5050bf9886db20cc8e8aeaffeac5a3b8e080cfd0aeb88842173664993a3250c2d77e63d995c3d3b06d20d266e73bffdad80ef8e9acda54f27380e3a704fc04c324130a8e4c6a6e066725d5ec32dfab4597e2199157a7726d403abdda16f18cde7c70a3268b681f45954ce6b889f363a05c1b5216603b8819d211f54793cabb60ed6b1cd55af543d458e3d5c28ed5a4fa429fd403c4630d56f8a91b78899f52b48d4397dba8f3de99ee61b02866015804805e9e66285f349d5bcc7e8354c543c7ea4295bbe91b69c497fe8f4417c4ec661a6492b88efc698dc595ee5020e4eb9ef9ccb9d9da04f89f0fde913d22a95ecf691bd234afef95da369982f4926238ce6343b0a311c6ccee1026fe8b14c8b79beaf2c99189aa9506fbc6421146a7b9edc485cf2d53fd5f404363044d882f458cec60c4b1a44e81b6f7a957061c669f4e509d0c7009a1c622fc0dfe2ebd3d2be2f50605dd9ed75c739ccfaea1bb4dfc9a098dd7a6681ad1143bd6c8dba0846f16718f97a08df7dc68da8145caf1217f8225fbc4708a9c0bb5327b300bbe97780b846af9449513d3d20e1b4101a7bf96a060e23cd73798ca9aa35604812a155390a7848eb110e03179a22960434cdab7b5a4c800e279a631351f72d2416671fc813b4935d1c2b6d615004c0e42c31fa6dbcde24408d93f7e9fb4846a93a1d64abdfe27c27f194a57ae3cf5451994f0937a88b8074a35836139c10c0149af53fff0fc2cc07b19cb1790c8ba1e101be332315173c5437abe8f",
- "signature": "0xb02b7bbbe07825555086c32089d65d2a5a40dbc44b81b89a5cd0046690a411d27db4d1b370fc5aaab0368a6568b1654903dbb7f75d1735976abeda9a317d7930a0c16d1d9e9869fb977332c973f545eb8e0c4233a80a15d0d59d6e04cc2bdb63",
- "withdrawalCredentials": "0x0100000000000000000000003C10b7C34950823c3e6CBeA660ED4f3065a3773E"
- },
- {
- "depositDataRoot": "0x7ac34cf40a221760dce8fce4e7831bbe001eab2eaf778176f8bf541b281cbf2e",
- "publicKey": "0x99c60152ae490d1e415a5d6dcb3e756bb8c3c354ac51dd3d10b0af864d802b3c457ab48321a08376de9fe0a248b32810",
- "operatorIds": [
- 156,
- 157,
- 158,
- 159
- ],
- "shares": "0xa3d3c7ad3ca4569d1df186dec501e593f7c705430f821d752d17fa74e190708727d9210e34e9f46de59194e69c0dc10e0167ea0a333e48c100007047846d3399f971f790605c61c8d17cf3de90b4b09e9f6ee12e2e794557d0f7cb08a4a95560a043760a3a3cd005e0ea9487c2f7c9e88a4e73dac465e71b3af81ad7592ba3c4aea7dff55bd7f666046f6cd14adb404d8319f09c67d8b32a6ae1d8c503565d128dd1267fe5d18b9bf18cbafe859bd703294de5ad59e546f33b07740523ce46d595fbd2ab9fa69ae80d3b1c416e0a02b7a26b314bf36ce10baa565ff2b3c94fbf7233e6ce31accc1fbd4beee17149570988f2ed48b86bba13c0356200acb9a740c3f62a00dad0d73078a41c681652b026eeb6a317b6791ea721375625469475f6b433c4bb289b093a3565e5988323082d855298a6ae8efad9c495b1fca20cda4b803c4169c89052376663b59049adcd7895a345e93c9b90de0f60fc0a871ce33359d175d192a5065dbb5e2ba348286bfaaa24620f04a66edce05e44652323362145db16455a3a23c547f336fd928c8662ea653c0412369c7f788ffba230888ba5597c29f6e63ebeae72675f8a194012b80e496b5dc3d802939677ce50b2111f00f6154f0ba64613ed6bcadab9b298f7fedd624de9c3db670d9338063b5b66b39fbcf5bc96a2668a18847cd771db7384aea1d2896d98bea41eae358a45a57c4fc473ea9aa2afd7cb0e225ff86bd72593dd860068c02cfe72a7ccda6538ebb8026067e888166d76c2c9c4e38c98a736f640f3c9c83bd6f0a7e2a176cc683ecbefc7b8f1fa1e48aa9d4c858af4dcc88c762b2310d5105b9c04293953cd41fd1ba2d5d15bac4a169c15a1b76096747125aec189ed89d401470cf6f2937d8fa34a80a252f4e51b05795f4af11e4b33375d95162930e768cac269c7d1625db216741de4faeea8aa9f7aca60b624ad2f8b2a37433982cc20c973f3acbea965b2d21a8cad859fd495132f53943a5714ccdd6119b86105d49d02a8165fdff1762585d7fd51eb6e2f021e91b01da7dba4a1dae2d22707aea7df5a89692e7e2d9cbddb5e60fe673ca1e3b1abcfcb52de5f580a882c57e1096c93cfa4ac0c6bfa2eb622f0e6708aa2470e66d76a95a1a6d8c2bd7b8d7466d0a784b9d1ca262ba752a4dc772334feff996c841def8df9482d66f4ca065e2002377efaedf638797db1e2f1662d677c5e4df924ebc945c3cffbe9042ee1c7f4173264daa458e543486824693265e878aed2ef3baedcd8d166547be542f65dfd6df67aefda0fc9964a0203dc151dbcc7a231190fb73f8170797dc9cbaf153c95f608f5e37a72f578352a3dd3a4f905a8387ede01041e3171150ee311d54c9a058fa5d4173b40ab203c713c5127360e966246da3d4dd2d68cf162815b82f562cf63432804ba058d08aeb0442c21e5955f6d0a20be5d17bf52a542497728fbd57f2e25b01dde449f5f548642194247ae257f26e8617952daf45a0a172bbbe5f8264afca7fec74499bf1e370b5b26a6e10e7d31f7730eecc78dd7cc0a060902bf660a0fb8f8be78f205d779d2d97109bfbcbac672fb7bc9fbee492828ab6a055373af10f1cbc1b134a102f8df62fe65c1e25329a740b3a73cc2af971ff1ff5351d898f0a11b3ff5ec27be3918ee0c442473897ab8b611ae8c5f39cd0a6f5f32337cadfd0e709ecbe4a48c248b177639f6f978fb04b1c0b5d3d3f9b93773b20ecb8a4f0649dd249a883f708ea2286e746dce3c66a5a2d25e41635cf7e593a381e6088eebd93126f398d6c08e947f2739064cdabb434404701f0fa3169c0830997c5be20cc07716e6203e0e8e92eb4d16b6",
- "signature": "0xa863c2d564ca2dbcc5bcaa44361f223c01f92d65cfa860cc366d1f15bdcabe206fae9ce270b38082f83796a0ba0bc38601c6e80110d1f9793ae3e05c3c6991ca7bd6543b412ff612e53fc5c80f71e57b2cbdd7dfa1891aa0f1c738900c7194c4",
- "withdrawalCredentials": "0x0100000000000000000000004F64df9D1B772652176F5e695CC99bab469b3089"
- }
- ]
-}
\ No newline at end of file
diff --git a/common/env/src/index.ts b/common/env/src/index.ts
index ebe38e698..9793a5866 100644
--- a/common/env/src/index.ts
+++ b/common/env/src/index.ts
@@ -1,20 +1,27 @@
+import MOCK_OPERATORS from './mock/operators.json'
+import MOCK_RESHARES from './mock/reshares.json'
+import MOCK_VALIDATORS from './mock/validators.json'
+
+// Default CasimirManager contract deployed to 0xA279b2cD2fe7f71f3dD77deF9dedC114bBC0a68c
+// Default CasimirRegistry contract deployed to 0x2c6E6453c0AA873E81a9CFcFa2206E1b9E6C21e0
+// Default CasimirUpkeep contract deployed to 0xe4FB499e9D87dE483258BF757589310C137B97D9
+// Default CasimirViews contract deployed to 0x394042CBB8bF5444766496897982A5CDd01d5099
+
const ETHEREUM_CONTRACTS = {
TESTNET: {
- MANAGER_ADDRESS: '0xFBA09a098014b414A4aBD2C1Ca43383Ad63f8492',
- REGISTRY_ADDRESS: '0x5c118E76cCfBEAd615BBB2B485c0729c69CEac1a',
- UPKEEP_ADDRESS: '0x449AcFeb4769C283dcB94ae09779A3233A9c3653',
- VIEWS_ADDRESS: '0x1EcF11435187dCb07aA758Db006cA98EA381817b',
-
- FUNCTIONS_BILLING_REGISTRY_ADDRESS: '0x736fe8342E7BA5bF50757D266391b675394D9458',
- FUNCTIONS_ORACLE_ADDRESS: '0x599E62F28a185c2F68c6DC82CD7dDd450C44d587',
- FUNCTIONS_ORACLE_FACTORY_ADDRESS: '0x45b277aD532172c9DDc079729F233875fD8B649D',
+ BEACON_LIBRARY_ADDRESS: '0xbc3681bDed4CaB8A4dCD155A1d9B8dd52Dd73e92',
+ MANAGER_BEACON_ADDRESS: '0x69D830C11bbD81c0A9AC031d17A2599D3a0F632E',
+ POOL_BEACON_ADDRESS: '0x9Ef6fb4fe7F7EB9DDeB019028E978439b9aD72BF',
+ REGISTRY_BEACON_ADDRESS: '0xC0799f7643978828cEBCe4F327dcA233dE1871C8',
+ UPKEEP_BEACON_ADDRESS: '0x0CCA5B647598e86fc0518A462f2e61C58Dc6F5ac',
+ VIEWS_BEACON_ADDRESS: '0x7B07be561eA274a78D9dC30FCFAcEeb2C6Ac3962',
+ FACTORY_ADDRESS: '0xA6fd22c5633bCD82Ee25045de91351a8dfA2c76F',
- POOL_BEACON_ADDRESS: '0x443d84cB8b116B9620F6807280160E8C6d6D4b5e',
- REGISTRY_BEACON_ADDRESS: '0x8E1539E198CB13dB0abce5CBB62a34eA2E0aF513',
- UPKEEP_BEACON_ADDRESS: '0xEeBc166D29A19cA47d2D15B2f0c3Fe1211F50821',
+ FUNCTIONS_BILLING_REGISTRY_ADDRESS: '0x0076D4E763ca38D25d75DE40015435E809933F31',
+ FUNCTIONS_ORACLE_ADDRESS: '0x63bF34606227c69c419EDf63D4aF5ACC472A48c0',
+ FUNCTIONS_ORACLE_FACTORY_ADDRESS: '0x96B485FbBA4e527Ce8387a0c1D4b02FC7E54f501',
- BEACON_DEPOSIT_ADDRESS: '0x07b39F4fDE4A38bACe212b546dAc87C58DfE3fDC',
- DAO_ORACLE_ADDRESS: '',
+ DEPOSIT_CONTRACT_ADDRESS: '0xff50ed3d0ec03aC01D4C79aAd74928BFF48a7b2b',
KEEPER_REGISTRAR_ADDRESS: '0x57A4a13b35d25EE78e084168aBaC5ad360252467',
KEEPER_REGISTRY_ADDRESS: '0xE16Df59B887e3Caa439E0b29B42bA2e7976FD8b2',
LINK_ETH_FEED_ADDRESS: '0xb4c4a493AB6356497713A78FFA6c60FB53517c63',
@@ -29,17 +36,38 @@ const ETHEREUM_CONTRACTS = {
}
enum ETHEREUM_NETWORK_NAME {
- MAINNET = 'mainnet',
TESTNET = 'goerli'
}
enum ETHEREUM_RPC_URL {
- MAINNET = 'https://mainnet.infura.io/v3/46a379ac6895489f812f33beb726b03b',
TESTNET = 'https://goerli.infura.io/v3/46a379ac6895489f812f33beb726b03b'
}
+const ETHEREUM_SIGNERS = {
+ TESTNET: {
+ DAO_ORACLE_ADDRESS: '0x728474D29c2F81eb17a669a7582A2C17f1042b57',
+ DON_TRANSMITTER_ADDRESS: '0x84725c8f954f18709aDcA150a0635D2fBE94fDfF',
+ OWNER_ADDRESS: '0xd557a5745d4560B24D36A68b52351ffF9c86A212'
+ }
+}
+
enum ETHEREUM_WS_URL {
TESTNET = 'wss://goerli.infura.io/ws/v3/46a379ac6895489f812f33beb726b03b'
}
-export { ETHEREUM_CONTRACTS, ETHEREUM_NETWORK_NAME, ETHEREUM_RPC_URL, ETHEREUM_WS_URL }
+enum HARDHAT_NETWORK_KEY {
+ GOERLI = 'TESTNET',
+ HARDHAT = 'TESTNET'
+}
+
+export {
+ ETHEREUM_CONTRACTS,
+ ETHEREUM_NETWORK_NAME,
+ ETHEREUM_RPC_URL,
+ ETHEREUM_SIGNERS,
+ ETHEREUM_WS_URL,
+ HARDHAT_NETWORK_KEY,
+ MOCK_OPERATORS,
+ MOCK_RESHARES,
+ MOCK_VALIDATORS
+}
diff --git a/common/env/src/mock/operators.json b/common/env/src/mock/operators.json
new file mode 100644
index 000000000..ffe631468
--- /dev/null
+++ b/common/env/src/mock/operators.json
@@ -0,0 +1,42 @@
+[
+ {
+ "id": 208,
+ "public_key": "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdnppRS9lK21uYTZ6Zndac0NLMm0KcGtUMnVXUXNXMGQ2L0pkWHVTeVA3NFBBRU13UU51OUwxOUQ1eE4xczdhUFJjQmFNUDQxQzFPNG16RmlteUhmTQpxalh5Vm1kb1JKM0drZHRYVjBwYmsyaExPWW0wdWRyeVNpL1htTmhMeUtuS1JnZzRCYzcvZGpxYlU1bGhVRis1CmVKN0FQNElMV2hsWFAvRHkyUWp2TWp6dUhNVGFxUlh6QWl1RmVncGNFOWhEemJqUzBPZVNGQktsVXJBeWdTZTUKYkJLY0tmSkNjazByNk5qZ3lZZjJtSUN6OUcraVplaDFsUEdnVitkTHN5cmZGMlpQOHJTSmY3L280ckVDaUdVVwpMaFljcjUyZ2phWGxzeXNoejF1bCtFaUNKTFBDdUs3bzd6MnY5SzYrRHFkWm9qN2hnekE0UDFUV20zN01kSXpBCnd3SURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K",
+ "ip": "https://nodes.casimir.co/eth/goerli/dkg/1"
+ },
+ {
+ "id": 209,
+ "public_key": "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBbDVVaU9Qd2tWZzhUajA1cmlFSm4KZWVlZDZneE0yZjNWVGhJb0ZCWFdtZ2V0NUh6SXZTK1M3cEJ1QmhCOGdvYlBsRUJ3V0RGK2FEaVRIL0FvY2pmeApRMllrb3lSK052Y0JwaFRpaWpIYXZwbDhqRkdmRWE0ZURTNm9RaWZMMHN3c1FkNU0xNURhczJOOEpid3ZYRE5ICktIVkduNzN1dlVGYXdyYldFeSs2a1FZTTREd2ZsWEpCT2ZnQjFEdlQ1dlVBdUtmdEFEL2NiMU1DRXY4NExHbksKYmhHY1F4aWRVTmZ1QlRiY085b0ZxaGQvUkdqK3NycElnKzI3U3Q0OWRhUDJ3YUNESm9uNnovTDlONGpMd01uWgpkalFYTEpoaEozWVBOdnFCT1pSS2RQS3ZxelRXV1NGK2IyUWRSRnJaa2cvMmFOTkgvOFJReXZoUjNPanJMOWpkCkZ3SURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K",
+ "ip": "https://nodes.casimir.co/eth/goerli/dkg/2"
+ },
+ {
+ "id": 210,
+ "public_key": "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBNHJ2dWxacWY2NExZQ2RxL1BFa0oKWTEzajVsVi9CWVJPWXVJL213S1h3M2lvQXl5VTNuOWtCWjA0cjRSRHovL1VNeFdaa0xuNUg5VUxBVU5aR25vbApPT09aUFJobEtyTUhzTjNhcnpBK3hTbW9UMGl3L0JMdWtPTWxKMTc0eWw5TGJOR1N1Mk1LZXpaOVNpM2dsVStKCmpWR1BVeEN4MTR5UU5EZ0lmWmpncEYwNHhhTy81SGtubVdvQ3FmRDBTYlNPSzY2Q200YlVrQzdVQlhTdzRDSGIKSHVkc1ZxL3dpcGNvU0RGUTZCVW44RDgzV2QwdllvYzZVTWh6akUxcmVpMnYzUk93MUpMUkhaQ0dxd0J3THRoNApidk5PdmNtUzlZYnpYVWdIdVZLaFF4WVFwa3UxZE5WakNXMFhabzdpMDVhMWQrYVk4STlvWkI2TGZ6YTllZlFVCjZ3SURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K",
+ "ip": "https://nodes.casimir.co/eth/goerli/dkg/3"
+ },
+ {
+ "id": 211,
+ "public_key": "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBNWNxZE5aWjdmUUdUQ0htTXhYSmIKSGFTdUFlWkQrV3hQaEJ0d25INW9DRldBVUs5dXBiZnBIRFlzY3FYb2piN3pGelNhVnhSZnlUREZqVGVuRGZ1Vwp1Ty9PckV2Vzd2YTJHQkZtc0JJQnJBSVhSKy9SdHdCbXdkU0ZhVmV6OTNPWHZ3Y21XZkFCUG9nY2hoRjlSUVY5Ckp1RTRmOFI4OUpibFBjWGJHL2NZYzJYM1U5aERWUEw4ZllrR0FYTmtPY3YvWitPSFRiaVJCcEtTMTB2b0ZnOFgKbU9SamhreENVM2NUZ3dqYjBXUEF3KysvbXdENHEwRlBkRmsxODdCWDBtZ0thODB6UGI1NzZ5TER5YWlEMjZhegpLR3hHN3ZiQ29tSE9KMktSNElxMG42YlBBSkg5Y1dUTEs0UEFXY0dWQWIxUW8rNDRFT0NVeTAwQ21uNFB1SVRjCnFRSURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K",
+ "ip": "https://nodes.casimir.co/eth/goerli/dkg/4"
+ },
+ {
+ "id": 212,
+ "public_key": "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBNXZKSEIwSmduVEM2SFJiQkNON2IKbUpiNG9LMGlJci9wU0VZU1U0VzNYVTNmMWFoRFZ2TmF1U284TXlkUndtV0RUVzJHUWZuTnFjYUFCNk11cW4zQQpJTG5DRFVRcllpZ25YOGZRZnFrenY1TDNSK1dLOTJPcmp3citWVE5veEE3ZXlSeHhMYTVybEd4dkYwUk5MbGJRCnVlc01BeVVZTEVnZXdrRTFPa2tIcWlzQzJCVlRQZTJsQWprMFBmNU9TS0hkd2ttWXQ3TGhHTG1NekJXdzY0cFAKRk9HRTYxSEkxVklueXZnMVRqMWVQVStPTHJKYVVrMlZMeWhzcHBWNTk0RW9BYlQ5TU05cDJmcGtXMmpEV2ZabQpWc0dlUnNjOGFUZlpLUHp0MlkvRGUzTUhUQ3RHRCsraldCWDJ3Z0xGU0tkanhJbFVuNUZuRGpOcVNlQlZWalJwCmV3SURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K",
+ "ip": "https://nodes.casimir.co/eth/goerli/dkg/5"
+ },
+ {
+ "id": 213,
+ "public_key": "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdHFkYXhuNDlHSVV5OE5XRlI0K3QKNktCREhyd0t4WFppRE5ZRVEySVBXQzZYWWN1TjZXN2Y3UUlONWxOWDYvY3VySkYvQjlzbC9jeGFlR0NWS3lnQwpNV1hjS29ENGQwVjk2STlBUU91WXNWaTB3VjZiUCtlUXBmU2xjL1JoNXorNll1ejRQYXJESVBzc2dPUEpKWkk2CjRWNktsdXlieVA4NFVldHU1SUVzRXhINUVJMFBHZHRwZ09NVFRkU1MvVU9ReCt1eVcrVUtpWGNkd0s4MFJFOXgKcVI2VHhwaWt3ZDVGT0MyNFNWeTAwYWgvM1d4YURIWUZkYXErYjR4VWpPV21GTTJYcjY5YnM0LzRydmd4NkdlYwpqVzJ1UC95UWZ2VWxmNmpvdkZiamdkUUdBWld5ZUR3SnhsdHdEZEZZNW43MjZSMnpybnphV2ZwRXdIWjJDUGoxCkd3SURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K",
+ "ip": "https://nodes.casimir.co/eth/goerli/dkg/6"
+ },
+ {
+ "id": 214,
+ "public_key": "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdU94c1l4aWFseWRFZDI5VTV0UlkKclgxK0NrcFhRSngrME5qdFhwaUQrOE9pNGNNR0pTY09DemE1RG5oNHFqb3pkQiszU3lNM3pBTFRIYmpFNjNkSAoxVTFjeEFUSzJ6K2JxaWRSZ3NsSDZmakVNL3pBdDEreS9ZUThNMFB0d3VEYVZsTGZTQjdkVTRMLys0SlZCU0E0Cm1TUi9QbDFDL1NGdWMycThpK2ljUk9XazhXQnhUdnZFd1pVSnFONk5NUUZBc09BNzNVdXlMYkpiOWdCdGJvZnUKeUxkSlRzSU1sWlFYdENrdlQvVlFadklxdzVpLzFOazJTZVRjSS9Xd3ZaVU5tWks3Y2R2b0xveVpCenJFMDFqZQordi9nalVJOENGK0ZZVHJjRWI0U2Q1cWRKOUVCZ3dLQVo5YVd6ellnbS9OQ283QndWSzZzaFNuSGQzS2JmUVVMCkN3SURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K",
+ "ip": "https://nodes.casimir.co/eth/goerli/dkg/7"
+ },
+ {
+ "id": 215,
+ "public_key": "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBc0I3YjF5eGhiR1htZFJoaG41WE8KQlBQc2w3YlQvM1BQRm9EMFJadk9paUdXYnNTN1o3ZzZ1RGE4enI1b0xGbWVHdm1Ka1pKNnZJaWtUNmJWajZYWgpjRWc0OFFKYmlZOWpkOUJJWk9jcDkydlRoWU5GWWwxT1VTajdjQTlKRjd3THYzbHRoT1J5RWNQQ2JXM2ZXYXdYCkoyR2c3cTN4RDhERlhSb0gzMGY0ZW5sbHdGQkluQWFnc0RZWUl6Z1orbmpWNWtVWDkvVkk1U2hiOC80a0FtaVgKdVArazF1SGoreW5VcjhNaUdna2tmSnhpQ1VVQmFpOGdhdGc1TlloSjhYM3VDY1J6bDQwODZuYVNrMlFMUDRWVQpibkZBUTFFR0hxZXRYNnM3UDFRU3BYd0VXa21ka2xoNlJ4UkVnTHhrVWtQazFOTTk3ZGFPWEhLVHlMb2VVdlhmCkRRSURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K",
+ "ip": "https://nodes.casimir.co/eth/goerli/dkg/8"
+ }
+]
\ No newline at end of file
diff --git a/common/data/src/mock/reshare.store.json b/common/env/src/mock/reshares.json
similarity index 100%
rename from common/data/src/mock/reshare.store.json
rename to common/env/src/mock/reshares.json
diff --git a/common/env/src/mock/validators.json b/common/env/src/mock/validators.json
new file mode 100644
index 000000000..d3b11f535
--- /dev/null
+++ b/common/env/src/mock/validators.json
@@ -0,0 +1 @@
+{"0x728474D29c2F81eb17a669a7582A2C17f1042b57":[{"depositDataRoot":"0xe9e6379915234bbd8022a6e102de971c091c1c6611b99a71748b5cff4df4bee3","publicKey":"0xb6544f4035d7541033e955e38c37d8505ab2b4cf946bde8ed83da7c0faece54f7770e984804e6fe38387e89e635c39f5","operatorIds":[208,209,210,211],"shares":"0x9256924c9e1d6875b97de728251b31f9da33ad76aff85f461f308c79b3b8eb38a7188fd31489aea9b28a9b15f95c449517354f80169947c8ce58e8bef9b2f0b57e4f71733abc80ed66d1c7009d7be2caeef02a97a2748d50ce5717d4cb82c8c98df8ea82e64b316e8401dc17c6eed80e45f4720c376aa2c16e74f06840401f744a3226c734170c607f6c5bf6beac00b880ecd6046310c60a96f6e90529290d1469c06436706c089ff8ab98e3da39a4472997f824cca1a645aef2ea71b57ed51c8863f94bca0ba001e44287c767732c7ee5b6c3c842ff29b1ec515e1c8546d2f634fd3588bdec9042bf08fd2b1ca0e6808258629b1a68692ce43f3fef237a0866eed7cd021a6ba48329b36473e8c70e05f37297abd2aaaaf966bfd216d3e792376c6a2674622e06b6db4e8b21da9a169b4990c445ccdc94c9c9e654d23c295e0b0485d87dc7f26d33d39cb19598db2c80e4382696811690b35bf93f3bc08a4c68ef0ec7693555caa453f6f4a5f04156c7db8c2a6d944e9203b57def51aa1390d1e77bd14da65dcdfbcdbdd29843889f06a9bebb3cf4e77348381f6bcc01ef5e4ee28f6eb2b9e36942c43e41e0340bfd79bb5fef55fee9a71aff06d68fcb9c003f8d55fb8156acd1d4d23697ddbbdbee71df7675bce57f69f3213deed9f6fb9158afce5a6955879bdb3bf9d8e0088e3da236557038a722587b8b48b0cb26e35a0f1e567b9b5febeab3fb19ac288d2f761b4e60c0612b3484e77f61712960a0317101cf4a5918064e6e7a05d2415202baa24ffeca332414d7d6ef72fdcdb2df803cb4356a82e9c9f7e5a791bc417788948218567c05d36bf4ef7ebec7d04236660aae55a947d499051f5e8dd4520e5b58e3f82804ced3e23bdd11016a4fee4c759f5505a09c0ce922fd1adfc1fad97228954f71a9c91c74ab4713c47177a909f62433e7b6a701d6cb8aca1e4ca6dfcc25f54c3ad4126b0d43ebbd410b1225b0ac96c7a4df8c5c8a477686b8971a7eccb01d4c1365f5a37d4edd982027c95c50ed8aca122e8f56cc4b7229505cfdbf37b925214ef39cf01c171ed8619aee458577f263cc2cfbfe162caeb2384b533e30f94f04d27db6f5ee14a81a9c5bee349e879527041469891eaecc9bfb4683de954894f7a0f48af535b74175614c45049b67e11af0406fb7c9e09bf0ab143a257e7b3c7b4c7042066c4c718c75aeda3d5294d6e16293b92ddcf7c5426521d096ee0fe14cde0a79717518c1b4a83fbf2259e604cc60ad7790f50481a095c0401681b646555aa2364346a9949c3e644ec9c8fb99adeb96591fb450a92251dc75d4dc4e51ba5742e2858a67548569ec026b375742ba0c16c29dd50ee1859ce05d52345d557fc663c3d57777fe9b60eb582b4789d2c1d31d62607ef7168f9922615c7b71309631a987b91f7a37dafe1369fcb24edc337c31e5490830fdb77a6a1db6a81b34c03a5135e55618e101909e8ff946a5b868e7eb90ed203036eb0e597a725c2e5f01b9899582b306250997c76e4e5b1aa33b94f2de31f15234423b652f101470a03cb1832b0bd50cf8b2e7b104c08ae42960ade9e0c6e83c04831fec9c4a832bb45bd3dc504fcb3d7abff24b2b0785128c2d91031603cc2e1fd549a4224705b1c8cf516e2504fa8fd6dcf93c8fa8bea433a0a214a37a8aa42a5b5660e4b48ac4d68af6d84be4b905b18b92be51b4a9269116c6d5d0c579707842422493331bd93794a4efcdce7c1803bd9a8fab44bf54e8bb1269b138ea402cfffa6de27c393335d9210c63bc53bb4b088ae1bc17abd5be61783032f5c6538215e87c8c35744a76521640e951fa5216068b552461638413","signature":"0xad6ef8e99ed7741e0886562e895c70eb64da1491b939d83e9dac7ee83a86349cc93c0d23d39514e22e6430c535715e1a14b5c4e9a3aec27c43e8f70a278de72d3702343f642443f9cfa2b4c4731805e699964fc302ade3907e71f24734d265a0","withdrawalCredentials":"0x0100000000000000000000007099c816928eab2999c263fa4c05991d807f0e81"},{"depositDataRoot":"0x0f168879257dfe7814835967ff130f6f970c0777b3299399b72182e6d9b0e5d8","publicKey":"0x8c51a42c8186dbf52c18722965bae7fd50e2d26f78d8ad28b6f29e19136f64647657f700d53f0df8337a171cfc36178d","operatorIds":[208,209,210,211],"shares":"0x844efd7d2c7bf9f04e52b9cf98f2a2b2e5189d25a36958ecbb84526298fa705cacd5e04f9f565548560abf95f2e5abba00cabc1e86aa08542d89ebeadb5ac8eb1967acb603285fc993959464899613240ee30429d7f88925ca623104cfad5c51b833148a87fc05f367489b5a79d860d4eed67e133861628883efacab9c47bda13fe85a21d2458d196542f581a81d3aabad2fbe9d8c5158bb12da9c5b144c55493ada67cce27b4a11302cfd61c45c11d17ac001e0291e4785f286d1b1b5b9c46698aeff1b086692eda79add33ee32f878dee6e7888a2a6f21e176a59c5de4d5557263d0d7550fd83bd3cd7c702d2a7d1fb1c08a01860c3b7b7c25d14680fef1dc25562132fd1fa65a14df88cd0adc02c496bdcdca92cb21e0f882e36443a24bdb117b18d1f93854811da444875cb54a1fb4e04f7b31b3d9751261d06693a04eb1b7a6463ac17b7e50743f66d434c13117adb1596be2de9fa4b24012f79e31dfff0b09060c420d71d84c365c324518035cf5f726c396832908a3e11209ce0a66f3365f08abf0f2817de9c390f0781d90b705ac6eb56bce28600da4b9580c79e9500c5fe664e16e2cc59b54cf8dd19147dd9a7d5795b0dbc9290d8823830c6373b05055d0ce9e2fac9a16edb1aa8f52aadae19022521eb993300ce898d340705eae6dba63641b71fab245ce58622d598d934dff8f417ce6ebd88905b2926d8151da7ce8d2d7cab9a54a1d12e390a202b18190c78124a29925ca6b9f596f11689cb705d1451ce03ee99db88f30fd1a39aa18d5175e1b8825f3475de304ab9ad3805eae19666a3dfe90611617bd052a7f6ba17a42ebe25593522f75a11adca59fbe0bec1b272f2285b51b862f3734470c18776d42104bb224a87a85ef10275851f9d7c4b6063da197af54eea12f4a02c5039eb35b54bc19a688feb75ccd9b87c1b5ec4313dda4945105aab40200587c685ed372b166bbe93c9c372d7311b523a84a34f30f619d5423344780336ba7c447989c531de0619318dcf3d3e2004d2bf4b07605d724acc6027d152db6607cac468d0e3968575dd76e7938a0db025351aaf3bb6648b2d924064c7a565c78ed0ffa2ecf4eab9b08ca44d4d6d7110bd3b7946f4495c58b6fcabf7a954b9bf01839a2f7bc22be8422d655787f6aa894978c4fddf26c5bc784ea3f93542574afca24aea8a1e9503f1ce014a3d7f57939298da1caa3aa5e54668fe33ffa259b33c31c042b6eb1cfbdd71a6ac45fe42c892a034e864430c9980f8a95c31534060228fecd926f31b4eb7ff0b48893f4c2674a44e05859fce385a409463c4c69fb08cc55ccde3d258aa0b27d0d3c68848a20c55b678086462a920d917928b39be1496a59c2a4f5cae5ecd208ce478c03b9c36df421c6a866f547719bea30bf9b926bf2ea1f7e45318e6bbd469a4d6bacfb17de4f8f10ba262bd00396b02871d424ba8e3844b6313b1527b404c883cca55f1c6d0d764a7764a40a7a80a65fd23e7df03185b2261dcf3579d43f9d1c1ec21390a0da4070b890e75a5254359f1725511c515bb70efe357436c034920e04faff9470bafd2cf2ab96197e717112460e2b0b198f9abe3eb3a261d5befac04a34f74beb2535f9024e44573929b0786b5780615c43cb16d0fe83451203897b50c9d8a6c01d58112bdebaef433495d156cf810e4765f69a93e7ef29165f371ad8491c9a9f0b28b65748aa7aa740a15f2a0789ce942141ba17dd921530d83d0f4fa595ac8336b99836a27382ad4312556656564f01530ffbbee1c37b7c569872d5a2a6966f4054f85b093e743ca530b0159b6fc52ff68bccf93c543c7712714ad728c02c74b77aa7e7","signature":"0x91fa12180d406be129cb086cc2acef1b2a10b81e10115f20a1e3c85c164d54e9f2229077bc8a1dc778faafdff65510a61169ae2aeeb86e12d33417f8319db5bb0fbb1f1f4b7fc0a1f3f1bb84fcd6d210b478470e6902f590bfe0fd28150ab5e8","withdrawalCredentials":"0x010000000000000000000000ed7049984b47c78cde8299b1704f871a924f4b7b"},{"depositDataRoot":"0xc5d4a68b6be86a522d2d904cb3bab92043e52150ffbc4889444b2abff602fcc2","publicKey":"0xb1485e412e0b60964f026b3700df322d9cf1b985803e6cadbedd0990bbbaa99998ce67c6a74496c127167cb12bb8f565","operatorIds":[208,209,210,211],"shares":"0xae46cd3cff5a56aa877f45a95196a1d1db57629eca4166e3f484ba4cbf6a2ca44a15e0dd80db2ee61c92fe03f25cd5e310377a47aa62a89300d2f64be8731c28d7e42369e3f2b48748e225c521bfe37c5c959d39ecbaaedf8cb17905b0e5c23289e77f2e84a23eeb621f27adb9b7a3751a908ff081b7928fed551a2adebf8222add13f102b11797f8ffecdad07dc5d2db3df26bb51c96ec588cae8e469d48a191709d3b2a3a1df8641d83197390965e24b3a722bb1ab9bf882cd24515c56dbd8b0e908fe307ee145d5c4e07fe523ffeed5c6e9de799424361347070db039f8e2c6e08cdf0bf392e4ce2fef19a8e3677482860722a6022e04b7f3c7c325c375341c963b7bd5d4496f8ba103628cf8c2d3e839c3f2eb317659fd7cc204b1c518d356e400459805abf729415707bd443d2e2da31a5c9791a3b223a8717de6b3d21dd9ede82de92fd50e1286258e64157b0fdbe7ab2ef78da04c839752f6b30344088e51793a4735ef855b0fd1ad580e295e0c3255e6fbc486206c853294407817526297442c6059d70e16494480031545c964d8698f168a41ea2e4edeb164f6658c2895305be336aef0c0a79b2b5d85d60258f4c2b6c6de75ea76779ecf683c8be1b2c2875de6068690d99fc4f7f79dd80c9dab0ccf12e0b18b4bda25e4728da8d0076c0c1112ea96fd2cd8cd1687b65961d1252156164cad72c46391f79d5d8a0723c02275f0f794250f13f36334adef7ada1c78021f2cd87bb623a34a159707a737c6f25d4715cf8be470b674ef844d0c619b18c96f7e7f047f3b9d4181a99f116a4bfe46350c3f5c8cc1f1c2ba808ef6f43187ddb3018543c171dedde67fc21867cb07479a57fcb938de7c29841e5515722099e7e296db19800de62b6c377d72e361816c7c529601c584cff55260b5fe9f9f76917f07bdf0b77d403b80d9588f963bf1d0cd96ec72b531587406575f6a01cffe3df7d20a72c36210e7c4b08540fe75138aa33ad553b2d59c9f51686a941073be73012a87bcd5945f18f7fe9686c755a630f002b9c8bfaf749e9b6bd541d49a21b90421df71be27ac142432846c42a3ab68191931466ea59003aee243c1b3f7374d9e8650270780c9b524961349a5b9601517655f46423e8261d0fd09d513726041cc8b9e94847483ec4661d3d3f59fbc4cbbe9472c2a6f0c61183ce5522ccbef7a2afe94d7bed7a75e734614f8118a2cb7a182d60cd27c111ced6558067724ab7bbc9584f1dab77123220a390af667802dabf386e5383142dcfe65056b008f6dbf504312db2c06db783c518e78365784c243f6d27473ce90786eb5d0e37a10a64904370631306f191d18eba48bc2b6a2ce1d84a1395c6d9a911b6892b25c44230b7a34f453503315d461a3969c7fab152b1fbe91216f66c69c1c58369066432db9ce31bc8435367ac0ac5b00feed070a453cc78030f96395986db84cb61041552df13a6ea2c4004901536cb6ffe450bdaf06782ec6536072ae347bb6cbd54ca2b85627ee89b67a51b39c59b4017bcd233283ef92ba0b4d1d310330b4106a95690c0c0653787262ae5ac07b71a3b21a111365b825af7c415f3b18c2401e34bc01671dcade0c929dfa2b817ee3363da307911d0032f21712729495aa266309fb6fa766995083b741903b370c5a22ea38d0b5e3058e0e2531a2d937f796747bdcf4796a4e88863af0e5ec32b70f11e28d43785659fbc3a7263a9e520e7deb7f550d3a62f67705830d7869c272abef38fb046cd0aa1fed1e957853ab291f1f2e7a1e8cadad85a5b1aafac949cba3837c65d5cc8ecfbda424bd6788dc6aef1180d4d0ae80dd33c07e21c794b332d10c","signature":"0xac0d234a46aa16b787c86d64d039f33f50d1ae895a929b481abb2069be6a8bcd7c2539c25b2152436104be4e9a0c7c110bb0ea4a984dabe0f0b05cb3e84a308904c590ec4fcb261389769b03dbb5746c2f5ab7fc8573a55b616a6c35481d5869","withdrawalCredentials":"0x010000000000000000000000e6ae2786b047107a8f12a7f0755fcf3c75317a7f"},{"depositDataRoot":"0xfa8be42837485dde0536ed2027a025142c8a0020b417268971f1f1532f7604e0","publicKey":"0x945498a73b7e10534e3623a9b21c9f35994570aa7390de0c0981102bf7c4cd09ac1a470b1928b414ecdc645f2959b559","operatorIds":[208,209,210,211],"shares":"0x82fa585182717a287e34ea649ee96f97863ba404440dbc49643490e1a9be5e860b08f01dcbd217404fb0963e2943481f0febee4a7783a9e5bbe5c32d1308d92235ecc6a750ad520d3202c801785db0989160240dd12c27cc09c71ae6e8bd3d6c96481b794bf7741b6404e96d7d92408d5bd7d2154fae9d5cc2e67780869a8402532a68dc447a2d6c5258344161979748abf8d0ec132b35f2ff88f530023122d24be327a54e611268389b70a852a618e4d3ac8f389732bcb8d52a1657349babca91d6bcf81c852a51a34f83286843e65a2dc2e607f709cbca180004f49a0604e1b383af3a08240f88344dc9ce51471f8f8f557d06f53fa9912949fc7ceeb1aacfec1fb307e145e3b4edf20794ef72cf41c43797d69f21c53372a603b6a148845c1e39ae98b76c7e0d3c6af9c866c898194ca18c66bf4f3973a23c1d8d1ea657ec275c9fecb5965eec773890e662624d6d381b37f5619658d96f02d13c7e19666febd08659b41d0710c6136db2f1743b08f55a3cb2266dfca400a42955879fed0b35c939256c4932e6b1ce3fbc2751b1d406ba5a3d1e9409fdead7e373b9f295cb02bfe82931aa4404eacfb090ac5ff5e1d3d03ad82ea7124e5566234a5f7faba217ae2263bc83b0b359572e7bbf714212c2406389c0894235ce960a4f22a2bf481cc953b385614434901b5bc671be05f9222ea9b8ac5373489f1d4e91689ae6ae389beed22d831cb8ddf80ad22550596df0506839021a70233ada80928f3f3e824f21d5b50ad4793af8f957353ea6cc604bf0fdf23ea7f7b4b19b41d94393f62d647b127723da5b24ab24a796cf3a1166df52ec7678ec464415d36184bfa19d4fa4865005a60e4a965563f97622022c1f2894912886aae86eff47fd88218eaf8d06b03f72ffa728c5b7a2891c51288e0a148be79e40dc1128d7b2f7a7257ee023bfdf9714ecc0e7a70c9209441acc8d29e846cca12943b4ef11484a0c3a67ac52b8cd5fa05eca52ab2046a5636fde4e83202d4151b759080f93822f1ae6c8a11d6512bef92197ac38c7f0136391df6b15ff7b335a9540470c4c96ad843d1bdaf2abf22859b21b845422fe8c5b3ab47602a20e1c8755e876889f0daf0c0fec6119033811bd03135a98f1668374bea09ef8316424fff4c16340f2e1dbb336311b4354f485990238a94e5c093313df6504076199802958d384b8a174162086370db599c29b15ff3d5509c426ca7695c1a940b7ca44361a0a495dbed1a1e8dbc0e880870a35edaf8c8ac949f703132b30be3f4da2cbb4cac21742dd69d8537f13f50d0207a3a14073d06f6724fc0433d301d640c37c14b32cd641c547f9a7db653043bf0f9f3444ef04585f89a9c36bf7ae35ccfd3ac9c0b566ea604fe8e55ad501d30af2584be23262676627ae7faaf297e6c8d3cc363a3753e7b101158dd43f7676d416fa45961c088bb3f97bd499a50af7c15b99257a3b410248cb4c14f6f6567194410d32f974ba1b4b35d2cd2e72d04044b6b0b79a150fe8f3654f151d0af49974bee3aada2243cbe9aa95914df666b3b8907a24bc84b40acd4bc1bd94358d03257068b29e20a55b2cb8398f0c72381a6b212048e64d4358b56f5b938fabb7f379bafc22aac347d22a6136c79e312e4123dfe4cff7e24cfbf4ca7348ec3217850e1f5f23464fc162f17665428f219807b02aa1e657f2c62c084b9c085d349d1fadb5ff56501c310f0f67dc932f5e0681ec1017272363f59ec97c6c1672eb72b556db34401a3e37b0aef289b4c1ed8e99b1b89a946189f1ee8e971a6a0ac9dba571307c2b46190f721de6ffb9158c5f046b360aa1db1ab987b48c3e35299c9549","signature":"0xaece9e4cdfc98e4b9a941a0f042a209140e6bd1ae6fc12a7be13f16a3e9acbfb059d43ebd5cf53cc875fbe4c3e3aade817a522dddbcf3f52a6caaa37efb5fb9ed80c49079ae4378e76fbf9a5711db5714ee89eb7582ae6bfc125a1393348a159","withdrawalCredentials":"0x010000000000000000000000c1a885f2e5c95dc196c4dc45fa1541055b3a009c"}]}
\ No newline at end of file
diff --git a/common/events/package.json b/common/events/package.json
index 35eca4455..fda0eb92d 100644
--- a/common/events/package.json
+++ b/common/events/package.json
@@ -1,15 +1,15 @@
{
- "name": "@casimir/events",
- "private": "true",
- "main": "src/index.ts",
- "scripts": {
- "build": "echo '@casimir/events build not specified. Disregard this warning and any listed errors above if @casimir/events is not needed for the current project build.' && exit 0",
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "dependencies": {
- "ethers": "^5.7.2"
- },
- "devDependencies": {
- "@types/node": "^17.0.38"
- }
-}
+ "name": "@casimir/events",
+ "private": "true",
+ "main": "src/index.ts",
+ "scripts": {
+ "build": "echo '@casimir/events build not specified. Disregard this warning and any listed errors above if @casimir/events is not needed for the current project build.' && exit 0",
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "dependencies": {
+ "ethers": "^5.7.2"
+ },
+ "devDependencies": {
+ "@types/node": "^17.0.38"
+ }
+}
\ No newline at end of file
diff --git a/common/events/src/index.ts b/common/events/src/index.ts
index d5df5e8bc..0930fcfee 100644
--- a/common/events/src/index.ts
+++ b/common/events/src/index.ts
@@ -2,52 +2,70 @@ import { ethers } from 'ethers'
export function getEventsIterable(input: {
contractFilters: {
- abi: string[]
- address: string
- events: string[]
- }[]
- ethereumUrl?: string
- provider?: ethers.providers.JsonRpcProvider
- startBlock?: number
+ abi: string[];
+ addresses: string[];
+ events: string[];
+ }[];
+ ethereumUrl?: string;
+ provider?: ethers.providers.JsonRpcProvider;
+ startBlock?: number;
}) {
- const provider =
- input.provider || new ethers.providers.JsonRpcProvider(input.ethereumUrl)
+ const provider = input.provider || new ethers.providers.JsonRpcProvider(input.ethereumUrl)
return (async function* () {
- const queue: ethers.Event[][] = []
- const enqueue = (...args: ethers.Event[]) => queue.push(args)
+ const queue: ethers.Event[] = []
+ let currentResolve: (value: ethers.Event | PromiseLike) => void
+ let currentPromise = new Promise(resolve => {
+ currentResolve = resolve
+ })
+ const enqueueEvent = (...args: ethers.Event[]) => {
+ const e = args[args.length - 1] as ethers.Event
+ if (currentResolve) {
+ currentResolve(e)
+ currentPromise = new Promise(resolve => {
+ currentResolve = resolve
+ })
+ } else {
+ queue.push(e)
+ }
+ }
+ const latestBlock = await provider.getBlockNumber()
for (const filter of input.contractFilters) {
- const contract = new ethers.Contract(
- filter.address,
- filter.abi,
- provider
- ) as ethers.Contract
- if (input.startBlock !== undefined) {
+ for (const address of filter.addresses) {
for (const event of filter.events) {
- const historicalEvents = await contract.queryFilter(
- event,
- input.startBlock,
- 'latest'
- )
- for (const historicalEvent of historicalEvents) {
- enqueue(historicalEvent)
+ const contract = new ethers.Contract(address, filter.abi, provider) as ethers.Contract
+ const tempQueue: ethers.Event[] = []
+ const tempListener = (...args: ethers.Event[]) => {
+ const e = args[args.length - 1] as ethers.Event
+ if (e.blockNumber > latestBlock) {
+ tempQueue.push(e)
+ }
+ }
+ contract.on(event, tempListener)
+ if (input.startBlock) {
+ const historicalEvents = await contract.queryFilter(event, input.startBlock, latestBlock)
+ for (const historicalEvent of historicalEvents) {
+ enqueueEvent(historicalEvent)
+ }
}
+ contract.off(event, tempListener)
+ while (tempQueue.length) {
+ const nextTempEvent = tempQueue.shift()
+ if (nextTempEvent) {
+ enqueueEvent(nextTempEvent)
+ }
+ }
+ contract.on(event, enqueueEvent)
}
}
- for (const event of filter.events) {
- contract.on(event, enqueue)
- while (true) {
- if (queue.length === 0) {
- await new Promise((resolve) => {
- const waitListener = () => {
- contract.off(event, waitListener)
- resolve()
- }
- contract.on(event, waitListener)
- })
- } else {
- yield queue.shift()
- }
+ }
+ while (true) {
+ if (queue.length > 0) {
+ const nextEvent = queue.shift()
+ if (nextEvent) {
+ yield nextEvent
}
+ } else {
+ yield await currentPromise
}
}
})()
diff --git a/common/types/src/index.ts b/common/types/src/index.ts
index 979c8d328..e3adee3ec 100644
--- a/common/types/src/index.ts
+++ b/common/types/src/index.ts
@@ -3,6 +3,7 @@ import { AccountWithStakingAndOperatorInfo } from './interfaces/AccountWithStaki
import { AddAccountOptions } from './interfaces/AddAccountOptions'
import { AnalyticsData } from './interfaces/AnalyticsData'
import { ApiResponse } from './interfaces/ApiResponse'
+import { Article } from './interfaces/Article'
import { BalanceSnapshot } from './interfaces/BalanceSnapshot'
import { BreakdownAmount } from './interfaces/BreakdownAmount'
import { BreakdownString } from './interfaces/BreakdownString'
@@ -19,10 +20,11 @@ import { ExistingUserCheck } from './interfaces/ExistingUserCheck'
import { FormattedWalletOption } from './interfaces/FormattedWalletOption'
import { GasEstimate } from './interfaces/GasEstimate'
import { LoginCredentials } from './interfaces/LoginCredentials'
+import { ManagerConfig } from './interfaces/ManagerConfig'
import { MessageRequest } from './interfaces/MessageRequest'
import { Operator } from './interfaces/Operator'
import { OperatorAddedSuccess } from './interfaces/OperatorAddedSuccess'
-import { Pool } from './interfaces/Pool'
+import { PoolConfig } from './interfaces/PoolConfig'
import { PoolStatus } from './interfaces/PoolStatus'
import { ProviderString } from './interfaces/ProviderString'
import { SignInWithEthereumCredentials } from './interfaces/SignInWithEthereumCredentials'
@@ -44,6 +46,7 @@ export type {
ApiResponse,
AddAccountOptions,
AnalyticsData,
+ Article,
BalanceSnapshot,
BreakdownAmount,
BreakdownString,
@@ -60,10 +63,11 @@ export type {
FormattedWalletOption,
GasEstimate,
LoginCredentials,
+ ManagerConfig,
MessageRequest,
Operator,
OperatorAddedSuccess,
- Pool,
+ PoolConfig,
ProviderString,
SignInWithEthereumCredentials,
TransactionRequest,
diff --git a/common/types/src/interfaces/Account.ts b/common/types/src/interfaces/Account.ts
index f2360b43c..dfeefbf35 100644
--- a/common/types/src/interfaces/Account.ts
+++ b/common/types/src/interfaces/Account.ts
@@ -1,7 +1,6 @@
import { BalanceSnapshot } from './BalanceSnapshot'
import { ProviderString } from './ProviderString'
import { Currency } from './Currency'
-import { Pool } from './Pool'
export interface Account {
/** The address of the current account */
diff --git a/common/types/src/interfaces/AccountWithStakingAndOperatorInfo.ts b/common/types/src/interfaces/AccountWithStakingAndOperatorInfo.ts
index 573a45f44..84893d7cf 100644
--- a/common/types/src/interfaces/AccountWithStakingAndOperatorInfo.ts
+++ b/common/types/src/interfaces/AccountWithStakingAndOperatorInfo.ts
@@ -1,8 +1,8 @@
-import { Account, Operator, Pool } from '@casimir/types'
+import { Account, Operator, PoolConfig } from '@casimir/types'
export interface AccountWithStakingAndOperatorInfo extends Account {
/** The user's current staking pools and details (this interface/logic is in the web app wallet composable, but it will be moved to the processor, see https://github.com/consensusnetworks/casimir/blob/master/apps/web/src/composables/wallet.ts#L146) */
- pools?: Pool[]
+ pools?: PoolConfig[]
/** The total amount of stake rewards available to withdraw (ignore for now, see note on Account.pools) */
rewards?: string
/** Return on investment rate (see https://github.com/consensusnetworks/casimir/issues/168#issuecomment-1314420917) */
diff --git a/common/types/src/interfaces/Article.ts b/common/types/src/interfaces/Article.ts
new file mode 100644
index 000000000..a3c0a9073
--- /dev/null
+++ b/common/types/src/interfaces/Article.ts
@@ -0,0 +1,20 @@
+export interface Article {
+ id: string
+ title: string
+ tags: string[]
+ createdAt: number
+ titleUpdatedAt: number
+ tagsUpdatedAt: number
+ publishType: string
+ publishedAt: number
+ permalink: string
+ publishLink: string
+ shortId: string
+ content: string
+ lastChangedAt: number
+ lastChangeUser: null
+ userPath: null
+ teamPath: string
+ readPermission: string
+ writePermission: string
+}
\ No newline at end of file
diff --git a/common/types/src/interfaces/ContractEventsByAddress.ts b/common/types/src/interfaces/ContractEventsByAddress.ts
index cd917de62..4e92c4dbf 100644
--- a/common/types/src/interfaces/ContractEventsByAddress.ts
+++ b/common/types/src/interfaces/ContractEventsByAddress.ts
@@ -1,8 +1,8 @@
export interface ContractEventsByAddress {
CompletedExitReportsRequested?: number;
- DepositActivated?: number;
- DepositInitiated?: number;
- DepositRequested?: number;
+ PoolActivated?: number;
+ PoolInitiated?: number;
+ InitiationRequested?: number;
ExitCompleted?: number;
ExitRequested?: number;
ForcedExitReportsRequested?: number;
diff --git a/common/types/src/interfaces/ManagerConfig.ts b/common/types/src/interfaces/ManagerConfig.ts
new file mode 100644
index 000000000..96170ac67
--- /dev/null
+++ b/common/types/src/interfaces/ManagerConfig.ts
@@ -0,0 +1,18 @@
+import { ethers } from 'ethers'
+
+export type ManagerConfig = {
+ managerAddress: string
+ registryAddress: string
+ upkeepAddress: string
+ viewsAddress: string
+ strategy: {
+ minCollateral: ethers.BigNumber
+ lockPeriod: ethers.BigNumber
+ userFee: number
+ compoundStake: boolean
+ eigenStake: boolean
+ liquidStake: boolean
+ privateOperators: boolean
+ verifiedOperators: boolean
+ }
+}
\ No newline at end of file
diff --git a/common/types/src/interfaces/Pool.ts b/common/types/src/interfaces/PoolConfig.ts
similarity index 74%
rename from common/types/src/interfaces/Pool.ts
rename to common/types/src/interfaces/PoolConfig.ts
index 6f0c76e9e..e7b9a29c8 100644
--- a/common/types/src/interfaces/Pool.ts
+++ b/common/types/src/interfaces/PoolConfig.ts
@@ -1,10 +1,10 @@
import { ethers } from 'ethers'
-export interface Pool {
- id: number;
+export interface PoolConfig {
+ poolAddress: string;
balance: ethers.BigNumber;
- publicKey: string;
operatorIds: number[];
+ publicKey: string;
reshares: number;
status: number;
}
\ No newline at end of file
diff --git a/common/types/src/interfaces/PoolStatus.ts b/common/types/src/interfaces/PoolStatus.ts
index 2d4ef6de2..f4f274b1c 100644
--- a/common/types/src/interfaces/PoolStatus.ts
+++ b/common/types/src/interfaces/PoolStatus.ts
@@ -1,4 +1,5 @@
export enum PoolStatus {
+ INACTIVE,
PENDING,
ACTIVE,
EXITING_FORCED,
diff --git a/common/types/src/interfaces/RegisteredOperator.ts b/common/types/src/interfaces/RegisteredOperator.ts
index 91bf945e0..54a6ea877 100644
--- a/common/types/src/interfaces/RegisteredOperator.ts
+++ b/common/types/src/interfaces/RegisteredOperator.ts
@@ -1,11 +1,11 @@
+import { PoolConfig } from './PoolConfig'
import { Operator } from '@casimir/ssv'
-import { Pool } from './Pool'
export interface RegisteredOperator extends Operator {
active: boolean
collateral: string
poolCount: number
- pools: Pool[]
- url: string
+ pools: PoolConfig[]
resharing: boolean
+ url: string
}
diff --git a/contracts/ethereum/.openzeppelin/goerli.json b/contracts/ethereum/.openzeppelin/goerli.json
index 7e8c81f02..3663216ac 100644
--- a/contracts/ethereum/.openzeppelin/goerli.json
+++ b/contracts/ethereum/.openzeppelin/goerli.json
@@ -1,25 +1,20 @@
{
"manifestVersion": "3.2",
"admin": {
- "address": "0xb096F7EeeF63F8AAc293b307aF4012278bc5acB2",
- "txHash": "0x789cb67a2cba8d2588e2fe3ec13affdba2445238579cb96751623d4c01fc00f1"
+ "address": "0xc70923517148D94A5C362DC0CA79cf24b1AF6bE4",
+ "txHash": "0x844f80016b166e504047b3afed9b7267a16aacd692bfe0c55c9e2594224a8093"
},
"proxies": [
{
- "address": "0xFBA09a098014b414A4aBD2C1Ca43383Ad63f8492",
- "txHash": "0x8eb5a1c0cb3ea4f76a5f14fae4b994a7f503245a3624eae4c06b74fb9b4ba18e",
- "kind": "transparent"
- },
- {
- "address": "0x1EcF11435187dCb07aA758Db006cA98EA381817b",
- "txHash": "0xc760831b8c5af95183e5934919ed2b5139c11bda922091ee45d2b67ddf7940b9",
+ "address": "0xA6fd22c5633bCD82Ee25045de91351a8dfA2c76F",
+ "txHash": "0xb8e3822e8dc2cabdd6097e1264d5180e43a98d18f055cbdd8e5dc7e8ddefe96d",
"kind": "transparent"
}
],
"impls": {
- "c811d22e19881061f0cc83b1549081d3b25644f16893670110d350a6670e7edb": {
- "address": "0xeAfca9a5bBC9dAF315d9bcafD80616C5F7cd0f5e",
- "txHash": "0x974bc4933792c0d982ea94ff9bcd432d7e6547c8f937a98e0627379cba634e29",
+ "3053df563e3dce71dc9e56bc2ca39c4e64d518fbecda1bd738e4ce87b9386db4": {
+ "address": "0x988512b7A874e1073b0f108C9CbE5CE9D5cCC061",
+ "txHash": "0xbd8f949f12727a0726e1092dbe2fc300551fd7f248f235bc95a61d70c7b0bb08",
"layout": {
"solcVersion": "0.8.18",
"storage": [
@@ -81,243 +76,292 @@
"src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88"
},
{
- "label": "manager",
+ "label": "lockPeriod",
"offset": 0,
"slot": "151",
- "type": "t_contract(ICasimirManager)19634",
- "contract": "CasimirPool",
- "src": "src/v1/CasimirPool.sol:28"
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:36"
},
{
- "label": "registry",
+ "label": "userFee",
"offset": 0,
"slot": "152",
- "type": "t_contract(ICasimirRegistry)19835",
- "contract": "CasimirPool",
- "src": "src/v1/CasimirPool.sol:30"
+ "type": "t_uint32",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:38"
},
{
- "label": "id",
- "offset": 20,
+ "label": "eigenStake",
+ "offset": 4,
+ "slot": "152",
+ "type": "t_bool",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:40"
+ },
+ {
+ "label": "liquidStake",
+ "offset": 5,
+ "slot": "152",
+ "type": "t_bool",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:42"
+ },
+ {
+ "label": "reportPeriod",
+ "offset": 6,
"slot": "152",
"type": "t_uint32",
- "contract": "CasimirPool",
- "src": "src/v1/CasimirPool.sol:32"
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:44"
},
{
- "label": "publicKey",
+ "label": "functionsId",
+ "offset": 10,
+ "slot": "152",
+ "type": "t_uint64",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:46"
+ },
+ {
+ "label": "upkeepId",
"offset": 0,
"slot": "153",
- "type": "t_bytes_storage",
- "contract": "CasimirPool",
- "src": "src/v1/CasimirPool.sol:34"
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:48"
},
{
- "label": "operatorIds",
+ "label": "latestBeaconBalance",
"offset": 0,
"slot": "154",
- "type": "t_array(t_uint64)dyn_storage",
- "contract": "CasimirPool",
- "src": "src/v1/CasimirPool.sol:36"
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:50"
},
{
- "label": "reshares",
+ "label": "finalizableActivations",
"offset": 0,
"slot": "155",
"type": "t_uint256",
- "contract": "CasimirPool",
- "src": "src/v1/CasimirPool.sol:38"
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:52"
},
{
- "label": "status",
+ "label": "finalizableCompletedExits",
"offset": 0,
"slot": "156",
- "type": "t_enum(PoolStatus)19642",
- "contract": "CasimirPool",
- "src": "src/v1/CasimirPool.sol:40"
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:54"
},
{
- "label": "__gap",
+ "label": "requestedWithdrawalBalance",
"offset": 0,
"slot": "157",
- "type": "t_array(t_uint256)50_storage",
- "contract": "CasimirPool",
- "src": "src/v1/CasimirPool.sol:42"
- }
- ],
- "types": {
- "t_address": {
- "label": "address",
- "numberOfBytes": "20"
- },
- "t_array(t_uint256)49_storage": {
- "label": "uint256[49]",
- "numberOfBytes": "1568"
- },
- "t_array(t_uint256)50_storage": {
- "label": "uint256[50]",
- "numberOfBytes": "1600"
- },
- "t_array(t_uint64)dyn_storage": {
- "label": "uint64[]",
- "numberOfBytes": "32"
- },
- "t_bool": {
- "label": "bool",
- "numberOfBytes": "1"
- },
- "t_bytes_storage": {
- "label": "bytes",
- "numberOfBytes": "32"
- },
- "t_contract(ICasimirManager)19634": {
- "label": "contract ICasimirManager",
- "numberOfBytes": "20"
- },
- "t_contract(ICasimirRegistry)19835": {
- "label": "contract ICasimirRegistry",
- "numberOfBytes": "20"
- },
- "t_enum(PoolStatus)19642": {
- "label": "enum ICasimirPool.PoolStatus",
- "members": [
- "PENDING",
- "ACTIVE",
- "EXITING_FORCED",
- "EXITING_REQUESTED",
- "WITHDRAWN"
- ],
- "numberOfBytes": "1"
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:56"
},
- "t_uint256": {
- "label": "uint256",
- "numberOfBytes": "32"
+ {
+ "label": "reservedFeeBalance",
+ "offset": 0,
+ "slot": "158",
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:58"
},
- "t_uint32": {
- "label": "uint32",
- "numberOfBytes": "4"
+ {
+ "label": "requestedExits",
+ "offset": 0,
+ "slot": "159",
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:60"
},
- "t_uint64": {
- "label": "uint64",
- "numberOfBytes": "8"
+ {
+ "label": "daoOracleAddress",
+ "offset": 0,
+ "slot": "160",
+ "type": "t_address",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:115"
},
- "t_uint8": {
- "label": "uint8",
- "numberOfBytes": "1"
- }
- }
- }
- },
- "48fb36af6728915c6ff46916fb78b9c20cb51d6d2d1d78a23b4a80659b556577": {
- "address": "0x47299bda4B85E32815feF94F1d48b22ACAfC712D",
- "txHash": "0x1de6a663ddcbe3bd8745315665abaf08aca87bc8317d1a53b343952d8376cdeb",
- "layout": {
- "solcVersion": "0.8.18",
- "storage": [
{
- "label": "_initialized",
+ "label": "factory",
"offset": 0,
- "slot": "0",
- "type": "t_uint8",
- "contract": "Initializable",
- "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63",
- "retypedFrom": "bool"
+ "slot": "161",
+ "type": "t_contract(ICasimirFactory)26854",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:117"
},
{
- "label": "_initializing",
- "offset": 1,
- "slot": "0",
- "type": "t_bool",
- "contract": "Initializable",
- "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68"
+ "label": "registry",
+ "offset": 0,
+ "slot": "162",
+ "type": "t_contract(ICasimirRegistry)27572",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:119"
},
{
- "label": "__gap",
+ "label": "upkeep",
"offset": 0,
- "slot": "1",
- "type": "t_array(t_uint256)50_storage",
- "contract": "ContextUpgradeable",
- "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36"
+ "slot": "163",
+ "type": "t_contract(ICasimirUpkeep)27670",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:121"
},
{
- "label": "_owner",
+ "label": "lastPoolId",
+ "offset": 20,
+ "slot": "163",
+ "type": "t_uint32",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:123"
+ },
+ {
+ "label": "latestBeaconBalanceAfterFees",
"offset": 0,
- "slot": "51",
- "type": "t_address",
- "contract": "OwnableUpgradeable",
- "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22"
+ "slot": "164",
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:125"
},
{
- "label": "__gap",
+ "label": "latestActiveRewardBalance",
"offset": 0,
- "slot": "52",
- "type": "t_array(t_uint256)49_storage",
- "contract": "OwnableUpgradeable",
- "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94"
+ "slot": "165",
+ "type": "t_int256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:127"
},
{
- "label": "_status",
+ "label": "finalizableExitedBalance",
"offset": 0,
- "slot": "101",
+ "slot": "166",
"type": "t_uint256",
- "contract": "ReentrancyGuardUpgradeable",
- "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38"
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:129"
},
{
- "label": "__gap",
+ "label": "finalizableRecoveredBalance",
"offset": 0,
- "slot": "102",
- "type": "t_array(t_uint256)49_storage",
- "contract": "ReentrancyGuardUpgradeable",
- "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88"
+ "slot": "167",
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:131"
},
{
- "label": "manager",
+ "label": "users",
"offset": 0,
- "slot": "151",
- "type": "t_contract(ICasimirManager)19634",
- "contract": "CasimirRegistry",
- "src": "src/v1/CasimirRegistry.sol:27"
+ "slot": "168",
+ "type": "t_mapping(t_address,t_struct(User)26729_storage)",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:133"
},
{
- "label": "ssvViews",
+ "label": "stakeRatioSum",
"offset": 0,
- "slot": "152",
- "type": "t_contract(ISSVViews)13867",
- "contract": "CasimirRegistry",
- "src": "src/v1/CasimirRegistry.sol:29"
+ "slot": "169",
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:135"
},
{
- "label": "operatorIds",
+ "label": "requestedWithdrawals",
"offset": 0,
- "slot": "153",
- "type": "t_array(t_uint64)dyn_storage",
- "contract": "CasimirRegistry",
- "src": "src/v1/CasimirRegistry.sol:31"
+ "slot": "170",
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:137"
},
{
- "label": "operators",
+ "label": "requestedWithdrawalQueue",
"offset": 0,
- "slot": "154",
- "type": "t_mapping(t_uint64,t_struct(Operator)19724_storage)",
- "contract": "CasimirRegistry",
- "src": "src/v1/CasimirRegistry.sol:33"
+ "slot": "171",
+ "type": "t_array(t_struct(Withdrawal)26736_storage)dyn_storage",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:139"
},
{
- "label": "operatorPools",
+ "label": "poolAddresses",
"offset": 0,
- "slot": "155",
- "type": "t_mapping(t_uint64,t_mapping(t_uint32,t_bool))",
- "contract": "CasimirRegistry",
- "src": "src/v1/CasimirRegistry.sol:35"
+ "slot": "172",
+ "type": "t_mapping(t_uint32,t_address)",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:141"
},
{
- "label": "__gap",
+ "label": "tipBalance",
"offset": 0,
- "slot": "156",
+ "slot": "173",
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:143"
+ },
+ {
+ "label": "recoveredBalances",
+ "offset": 0,
+ "slot": "174",
+ "type": "t_mapping(t_uint32,t_uint256)",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:145"
+ },
+ {
+ "label": "prepoolBalance",
+ "offset": 0,
+ "slot": "175",
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:147"
+ },
+ {
+ "label": "exitedBalance",
+ "offset": 0,
+ "slot": "176",
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:149"
+ },
+ {
+ "label": "readyPoolIds",
+ "offset": 0,
+ "slot": "177",
+ "type": "t_array(t_uint32)dyn_storage",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:151"
+ },
+ {
+ "label": "pendingPoolIds",
+ "offset": 0,
+ "slot": "178",
+ "type": "t_array(t_uint32)dyn_storage",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:153"
+ },
+ {
+ "label": "stakedPoolIds",
+ "offset": 0,
+ "slot": "179",
+ "type": "t_array(t_uint32)dyn_storage",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:155"
+ },
+ {
+ "label": "forcedExits",
+ "offset": 0,
+ "slot": "180",
+ "type": "t_uint256",
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:157"
+ },
+ {
+ "label": "__gap",
+ "offset": 0,
+ "slot": "181",
"type": "t_array(t_uint256)50_storage",
- "contract": "CasimirRegistry",
- "src": "src/v1/CasimirRegistry.sol:37"
+ "contract": "CasimirManager",
+ "src": "src/v1/CasimirManager.sol:159"
}
],
"types": {
@@ -325,6 +369,10 @@
"label": "address",
"numberOfBytes": "20"
},
+ "t_array(t_struct(Withdrawal)26736_storage)dyn_storage": {
+ "label": "struct ICasimirCore.Withdrawal[]",
+ "numberOfBytes": "32"
+ },
"t_array(t_uint256)49_storage": {
"label": "uint256[49]",
"numberOfBytes": "1568"
@@ -333,63 +381,77 @@
"label": "uint256[50]",
"numberOfBytes": "1600"
},
- "t_array(t_uint64)dyn_storage": {
- "label": "uint64[]",
+ "t_array(t_uint32)dyn_storage": {
+ "label": "uint32[]",
"numberOfBytes": "32"
},
"t_bool": {
"label": "bool",
"numberOfBytes": "1"
},
- "t_contract(ICasimirManager)19634": {
- "label": "contract ICasimirManager",
+ "t_contract(ICasimirFactory)26854": {
+ "label": "contract ICasimirFactory",
"numberOfBytes": "20"
},
- "t_contract(ISSVViews)13867": {
- "label": "contract ISSVViews",
+ "t_contract(ICasimirRegistry)27572": {
+ "label": "contract ICasimirRegistry",
"numberOfBytes": "20"
},
- "t_mapping(t_uint32,t_bool)": {
- "label": "mapping(uint32 => bool)",
+ "t_contract(ICasimirUpkeep)27670": {
+ "label": "contract ICasimirUpkeep",
+ "numberOfBytes": "20"
+ },
+ "t_int256": {
+ "label": "int256",
"numberOfBytes": "32"
},
- "t_mapping(t_uint64,t_mapping(t_uint32,t_bool))": {
- "label": "mapping(uint64 => mapping(uint32 => bool))",
+ "t_mapping(t_address,t_struct(User)26729_storage)": {
+ "label": "mapping(address => struct ICasimirCore.User)",
+ "numberOfBytes": "32"
+ },
+ "t_mapping(t_uint32,t_address)": {
+ "label": "mapping(uint32 => address)",
"numberOfBytes": "32"
},
- "t_mapping(t_uint64,t_struct(Operator)19724_storage)": {
- "label": "mapping(uint64 => struct ICasimirRegistry.Operator)",
+ "t_mapping(t_uint32,t_uint256)": {
+ "label": "mapping(uint32 => uint256)",
"numberOfBytes": "32"
},
- "t_struct(Operator)19724_storage": {
- "label": "struct ICasimirRegistry.Operator",
+ "t_struct(User)26729_storage": {
+ "label": "struct ICasimirCore.User",
"members": [
{
- "label": "id",
- "type": "t_uint64",
+ "label": "stake0",
+ "type": "t_uint256",
"offset": 0,
"slot": "0"
},
{
- "label": "active",
- "type": "t_bool",
- "offset": 8,
- "slot": "0"
- },
+ "label": "stakeRatioSum0",
+ "type": "t_uint256",
+ "offset": 0,
+ "slot": "1"
+ }
+ ],
+ "numberOfBytes": "64"
+ },
+ "t_struct(Withdrawal)26736_storage": {
+ "label": "struct ICasimirCore.Withdrawal",
+ "members": [
{
- "label": "resharing",
- "type": "t_bool",
- "offset": 9,
+ "label": "userAddress",
+ "type": "t_address",
+ "offset": 0,
"slot": "0"
},
{
- "label": "collateral",
+ "label": "amount",
"type": "t_uint256",
"offset": 0,
"slot": "1"
},
{
- "label": "poolCount",
+ "label": "period",
"type": "t_uint256",
"offset": 0,
"slot": "2"
@@ -413,12 +475,13 @@
"label": "uint8",
"numberOfBytes": "1"
}
- }
+ },
+ "namespaces": {}
}
},
- "387810c1df4e2578e73fd29da257e5092ae70e0a4ed20d8616d280506e85a7ae": {
- "address": "0x873A00b4CB0660121e9C897c8eb593fa6Dd7Ffef",
- "txHash": "0x0bb97a1f3c4898812dbe9c266290fb06d2ef37bacb80bbd37753063f4315b40a",
+ "a1f307257ee0b271609666399bd09f24c8ee6e5434c60dcf6f74c6ee310c57f8": {
+ "address": "0x0bAFF72F773b13598dC9E3fbF42f465e6F40e7E3",
+ "txHash": "0x4fa7897368a22c89178c1557e0616cdc882039f4b2c725a1e1ae7240ff2b3b52",
"layout": {
"solcVersion": "0.8.18",
"storage": [
@@ -480,188 +543,269 @@
"src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88"
},
{
- "label": "s_oracle",
+ "label": "publicKey",
"offset": 0,
"slot": "151",
- "type": "t_contract(FunctionsOracleInterface)4175",
- "contract": "FunctionsClient",
- "src": "src/v1/vendor/FunctionsClient.sol:13"
+ "type": "t_bytes_storage",
+ "contract": "CasimirPool",
+ "src": "src/v1/CasimirPool.sol:17"
},
{
- "label": "s_pendingRequests",
+ "label": "reshares",
"offset": 0,
"slot": "152",
- "type": "t_mapping(t_bytes32,t_address)",
- "contract": "FunctionsClient",
- "src": "src/v1/vendor/FunctionsClient.sol:14"
+ "type": "t_uint256",
+ "contract": "CasimirPool",
+ "src": "src/v1/CasimirPool.sol:19"
},
{
- "label": "manager",
+ "label": "status",
"offset": 0,
"slot": "153",
- "type": "t_contract(ICasimirManager)19634",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:36"
+ "type": "t_enum(PoolStatus)26707",
+ "contract": "CasimirPool",
+ "src": "src/v1/CasimirPool.sol:21"
},
{
- "label": "previousReportTimestamp",
+ "label": "operatorIds",
"offset": 0,
"slot": "154",
- "type": "t_uint256",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:38"
+ "type": "t_array(t_uint64)dyn_storage",
+ "contract": "CasimirPool",
+ "src": "src/v1/CasimirPool.sol:30"
},
{
- "label": "reportStatus",
+ "label": "poolId",
"offset": 0,
"slot": "155",
- "type": "t_enum(ReportStatus)19848",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:40"
- },
- {
- "label": "reportPeriod",
- "offset": 1,
- "slot": "155",
"type": "t_uint32",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:42"
+ "contract": "CasimirPool",
+ "src": "src/v1/CasimirPool.sol:32"
},
{
- "label": "reportRemainingRequests",
+ "label": "shares",
"offset": 0,
"slot": "156",
- "type": "t_uint256",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:44"
+ "type": "t_bytes_storage",
+ "contract": "CasimirPool",
+ "src": "src/v1/CasimirPool.sol:34"
},
{
- "label": "reportRequestBlock",
+ "label": "manager",
"offset": 0,
"slot": "157",
- "type": "t_uint256",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:46"
+ "type": "t_contract(ICasimirManager)27334",
+ "contract": "CasimirPool",
+ "src": "src/v1/CasimirPool.sol:36"
},
{
- "label": "reportTimestamp",
+ "label": "registry",
"offset": 0,
"slot": "158",
- "type": "t_uint256",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:48"
+ "type": "t_contract(ICasimirRegistry)27572",
+ "contract": "CasimirPool",
+ "src": "src/v1/CasimirPool.sol:38"
},
{
- "label": "reportSweptBalance",
+ "label": "__gap",
"offset": 0,
"slot": "159",
- "type": "t_uint256",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:50"
+ "type": "t_array(t_uint256)50_storage",
+ "contract": "CasimirPool",
+ "src": "src/v1/CasimirPool.sol:41"
+ }
+ ],
+ "types": {
+ "t_address": {
+ "label": "address",
+ "numberOfBytes": "20"
},
- {
- "label": "reportBeaconBalance",
- "offset": 0,
- "slot": "160",
- "type": "t_uint256",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:52"
+ "t_array(t_uint256)49_storage": {
+ "label": "uint256[49]",
+ "numberOfBytes": "1568"
},
- {
- "label": "reportActivatedDeposits",
- "offset": 0,
- "slot": "161",
- "type": "t_uint256",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:54"
+ "t_array(t_uint256)50_storage": {
+ "label": "uint256[50]",
+ "numberOfBytes": "1600"
},
- {
- "label": "reportForcedExits",
- "offset": 0,
- "slot": "162",
- "type": "t_uint256",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:56"
+ "t_array(t_uint64)dyn_storage": {
+ "label": "uint64[]",
+ "numberOfBytes": "32"
},
- {
- "label": "reportCompletedExits",
- "offset": 0,
- "slot": "163",
- "type": "t_uint256",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:58"
+ "t_bool": {
+ "label": "bool",
+ "numberOfBytes": "1"
},
- {
- "label": "reportCompoundablePoolIds",
- "offset": 0,
- "slot": "164",
- "type": "t_array(t_uint32)5_storage",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:60"
+ "t_bytes_storage": {
+ "label": "bytes",
+ "numberOfBytes": "32"
},
- {
- "label": "finalizableActivatedDeposits",
- "offset": 0,
- "slot": "165",
- "type": "t_uint256",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:62"
+ "t_contract(ICasimirManager)27334": {
+ "label": "contract ICasimirManager",
+ "numberOfBytes": "20"
},
- {
- "label": "finalizableCompoundablePoolIds",
- "offset": 0,
- "slot": "166",
- "type": "t_array(t_uint32)5_storage",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:64"
+ "t_contract(ICasimirRegistry)27572": {
+ "label": "contract ICasimirRegistry",
+ "numberOfBytes": "20"
},
- {
- "label": "reportRequests",
- "offset": 0,
- "slot": "167",
- "type": "t_mapping(t_bytes32,t_enum(RequestType)19844)",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:66"
+ "t_enum(PoolStatus)26707": {
+ "label": "enum ICasimirCore.PoolStatus",
+ "members": [
+ "READY",
+ "PENDING",
+ "ACTIVE",
+ "EXITING_FORCED",
+ "EXITING_REQUESTED",
+ "WITHDRAWN"
+ ],
+ "numberOfBytes": "1"
+ },
+ "t_uint256": {
+ "label": "uint256",
+ "numberOfBytes": "32"
+ },
+ "t_uint32": {
+ "label": "uint32",
+ "numberOfBytes": "4"
+ },
+ "t_uint64": {
+ "label": "uint64",
+ "numberOfBytes": "8"
},
+ "t_uint8": {
+ "label": "uint8",
+ "numberOfBytes": "1"
+ }
+ },
+ "namespaces": {}
+ }
+ },
+ "10659b12f4336129e6e7e3dbb9fe1b95d132a622357b9a8c3844528a4db50ebb": {
+ "address": "0x4580e980930C6045C0B55C1e107F2939F7eEcc7d",
+ "txHash": "0xa4263efc886b56b3f99ff3cf555d70d5e1a3c2728cac409bb5840368c08d8a4d",
+ "layout": {
+ "solcVersion": "0.8.18",
+ "storage": [
{
- "label": "reportResponseError",
+ "label": "_initialized",
"offset": 0,
- "slot": "168",
- "type": "t_bytes_storage",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:68"
+ "slot": "0",
+ "type": "t_uint8",
+ "contract": "Initializable",
+ "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63",
+ "retypedFrom": "bool"
},
{
- "label": "requestSource",
+ "label": "_initializing",
+ "offset": 1,
+ "slot": "0",
+ "type": "t_bool",
+ "contract": "Initializable",
+ "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68"
+ },
+ {
+ "label": "__gap",
"offset": 0,
- "slot": "169",
- "type": "t_string_storage",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:70"
+ "slot": "1",
+ "type": "t_array(t_uint256)50_storage",
+ "contract": "ContextUpgradeable",
+ "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36"
},
{
- "label": "defaultRequestArgs",
+ "label": "_owner",
"offset": 0,
- "slot": "170",
- "type": "t_array(t_string_storage)dyn_storage",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:72"
+ "slot": "51",
+ "type": "t_address",
+ "contract": "OwnableUpgradeable",
+ "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22"
},
{
- "label": "fulfillGasLimit",
+ "label": "__gap",
"offset": 0,
- "slot": "171",
- "type": "t_uint32",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:74"
+ "slot": "52",
+ "type": "t_array(t_uint256)49_storage",
+ "contract": "OwnableUpgradeable",
+ "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94"
+ },
+ {
+ "label": "_status",
+ "offset": 0,
+ "slot": "101",
+ "type": "t_uint256",
+ "contract": "ReentrancyGuardUpgradeable",
+ "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38"
},
{
"label": "__gap",
"offset": 0,
- "slot": "172",
+ "slot": "102",
+ "type": "t_array(t_uint256)49_storage",
+ "contract": "ReentrancyGuardUpgradeable",
+ "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88"
+ },
+ {
+ "label": "minCollateral",
+ "offset": 0,
+ "slot": "151",
+ "type": "t_uint256",
+ "contract": "CasimirRegistry",
+ "src": "src/v1/CasimirRegistry.sol:23"
+ },
+ {
+ "label": "privateOperators",
+ "offset": 0,
+ "slot": "152",
+ "type": "t_bool",
+ "contract": "CasimirRegistry",
+ "src": "src/v1/CasimirRegistry.sol:25"
+ },
+ {
+ "label": "verifiedOperators",
+ "offset": 1,
+ "slot": "152",
+ "type": "t_bool",
+ "contract": "CasimirRegistry",
+ "src": "src/v1/CasimirRegistry.sol:27"
+ },
+ {
+ "label": "manager",
+ "offset": 2,
+ "slot": "152",
+ "type": "t_contract(ICasimirManager)27334",
+ "contract": "CasimirRegistry",
+ "src": "src/v1/CasimirRegistry.sol:34"
+ },
+ {
+ "label": "operatorIds",
+ "offset": 0,
+ "slot": "153",
+ "type": "t_array(t_uint64)dyn_storage",
+ "contract": "CasimirRegistry",
+ "src": "src/v1/CasimirRegistry.sol:36"
+ },
+ {
+ "label": "operators",
+ "offset": 0,
+ "slot": "154",
+ "type": "t_mapping(t_uint64,t_struct(Operator)26674_storage)",
+ "contract": "CasimirRegistry",
+ "src": "src/v1/CasimirRegistry.sol:38"
+ },
+ {
+ "label": "operatorPools",
+ "offset": 0,
+ "slot": "155",
+ "type": "t_mapping(t_uint64,t_mapping(t_uint32,t_bool))",
+ "contract": "CasimirRegistry",
+ "src": "src/v1/CasimirRegistry.sol:40"
+ },
+ {
+ "label": "__gap",
+ "offset": 0,
+ "slot": "156",
"type": "t_array(t_uint256)50_storage",
- "contract": "CasimirUpkeep",
- "src": "src/v1/CasimirUpkeep.sol:76"
+ "contract": "CasimirRegistry",
+ "src": "src/v1/CasimirRegistry.sol:42"
}
],
"types": {
@@ -669,10 +813,6 @@
"label": "address",
"numberOfBytes": "20"
},
- "t_array(t_string_storage)dyn_storage": {
- "label": "string[]",
- "numberOfBytes": "32"
- },
"t_array(t_uint256)49_storage": {
"label": "uint256[49]",
"numberOfBytes": "1568"
@@ -681,60 +821,66 @@
"label": "uint256[50]",
"numberOfBytes": "1600"
},
- "t_array(t_uint32)5_storage": {
- "label": "uint32[5]",
+ "t_array(t_uint64)dyn_storage": {
+ "label": "uint64[]",
"numberOfBytes": "32"
},
"t_bool": {
"label": "bool",
"numberOfBytes": "1"
},
- "t_bytes32": {
- "label": "bytes32",
- "numberOfBytes": "32"
- },
- "t_bytes_storage": {
- "label": "bytes",
- "numberOfBytes": "32"
- },
- "t_contract(FunctionsOracleInterface)4175": {
- "label": "contract FunctionsOracleInterface",
- "numberOfBytes": "20"
- },
- "t_contract(ICasimirManager)19634": {
+ "t_contract(ICasimirManager)27334": {
"label": "contract ICasimirManager",
"numberOfBytes": "20"
},
- "t_enum(ReportStatus)19848": {
- "label": "enum ICasimirUpkeep.ReportStatus",
- "members": [
- "FINALIZED",
- "REQUESTING",
- "PROCESSING"
- ],
- "numberOfBytes": "1"
- },
- "t_enum(RequestType)19844": {
- "label": "enum ICasimirUpkeep.RequestType",
- "members": [
- "NONE",
- "BALANCES",
- "DETAILS"
- ],
- "numberOfBytes": "1"
- },
- "t_mapping(t_bytes32,t_address)": {
- "label": "mapping(bytes32 => address)",
+ "t_mapping(t_uint32,t_bool)": {
+ "label": "mapping(uint32 => bool)",
"numberOfBytes": "32"
},
- "t_mapping(t_bytes32,t_enum(RequestType)19844)": {
- "label": "mapping(bytes32 => enum ICasimirUpkeep.RequestType)",
+ "t_mapping(t_uint64,t_mapping(t_uint32,t_bool))": {
+ "label": "mapping(uint64 => mapping(uint32 => bool))",
"numberOfBytes": "32"
},
- "t_string_storage": {
- "label": "string",
+ "t_mapping(t_uint64,t_struct(Operator)26674_storage)": {
+ "label": "mapping(uint64 => struct ICasimirCore.Operator)",
"numberOfBytes": "32"
},
+ "t_struct(Operator)26674_storage": {
+ "label": "struct ICasimirCore.Operator",
+ "members": [
+ {
+ "label": "id",
+ "type": "t_uint64",
+ "offset": 0,
+ "slot": "0"
+ },
+ {
+ "label": "active",
+ "type": "t_bool",
+ "offset": 8,
+ "slot": "0"
+ },
+ {
+ "label": "collateral",
+ "type": "t_uint256",
+ "offset": 0,
+ "slot": "1"
+ },
+ {
+ "label": "poolCount",
+ "type": "t_uint256",
+ "offset": 0,
+ "slot": "2"
+ },
+ {
+ "label": "resharing",
+ "type": "t_bool",
+ "offset": 0,
+ "slot": "3"
+ }
+ ],
+ "numberOfBytes": "128"
+ },
"t_uint256": {
"label": "uint256",
"numberOfBytes": "32"
@@ -743,16 +889,21 @@
"label": "uint32",
"numberOfBytes": "4"
},
+ "t_uint64": {
+ "label": "uint64",
+ "numberOfBytes": "8"
+ },
"t_uint8": {
"label": "uint8",
"numberOfBytes": "1"
}
- }
+ },
+ "namespaces": {}
}
},
- "a783290b088783c30d2f7cb7873ee3469b7ffd7c3051961b6e8467a9aff82460": {
- "address": "0x253Da121b59d5e732d3C657AE19298B4661D710b",
- "txHash": "0x377be403e96e24c413ee75ac36d5575a22e6472bcecbfe6f4a398b79135e635e",
+ "cf025a31df7361980451810766e0d51e1cfa788f987b8987ef8a9a130708b11c": {
+ "address": "0xf7EB8b516b13B11c8e7D04D0C3e085D9a1B91b55",
+ "txHash": "0xd37be2ed1e7ec5df3f849fa0352f8f583eb5bea7e7b42cc6e83a0542398ee14d",
"layout": {
"solcVersion": "0.8.18",
"storage": [
@@ -814,332 +965,196 @@
"src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88"
},
{
- "label": "oracleAddress",
+ "label": "s_oracle",
"offset": 0,
"slot": "151",
- "type": "t_address",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:65"
+ "type": "t_contract(FunctionsOracleInterface)4175",
+ "contract": "FunctionsClient",
+ "src": "src/v1/vendor/FunctionsClient.sol:13"
},
{
- "label": "registry",
+ "label": "s_pendingRequests",
"offset": 0,
"slot": "152",
- "type": "t_contract(ICasimirRegistry)19835",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:67"
+ "type": "t_mapping(t_bytes32,t_address)",
+ "contract": "FunctionsClient",
+ "src": "src/v1/vendor/FunctionsClient.sol:14"
},
{
- "label": "upkeep",
+ "label": "compoundStake",
"offset": 0,
"slot": "153",
- "type": "t_contract(ICasimirUpkeep)19910",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:69"
+ "type": "t_bool",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:24"
+ },
+ {
+ "label": "factory",
+ "offset": 1,
+ "slot": "153",
+ "type": "t_contract(ICasimirFactory)26854",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:28"
},
{
- "label": "beaconDeposit",
+ "label": "manager",
"offset": 0,
"slot": "154",
- "type": "t_contract(IDepositContract)20614",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:71"
+ "type": "t_contract(ICasimirManager)27334",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:30"
},
{
- "label": "functionsBillingRegistry",
+ "label": "previousReportTimestamp",
"offset": 0,
"slot": "155",
- "type": "t_contract(IFunctionsBillingRegistry)20648",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:73"
+ "type": "t_uint256",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:32"
},
{
- "label": "keeperRegistrar",
+ "label": "reportStatus",
"offset": 0,
"slot": "156",
- "type": "t_contract(IKeeperRegistrar)20676",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:75"
+ "type": "t_enum(ReportStatus)27588",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:34"
},
{
- "label": "keeperRegistry",
- "offset": 0,
- "slot": "157",
- "type": "t_contract(IAutomationRegistry)20574",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:77"
+ "label": "reportPeriod",
+ "offset": 1,
+ "slot": "156",
+ "type": "t_uint32",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:36"
},
{
- "label": "linkToken",
+ "label": "reportRemainingRequests",
+ "offset": 0,
+ "slot": "157",
+ "type": "t_uint256",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:38"
+ },
+ {
+ "label": "reportRequestBlock",
"offset": 0,
"slot": "158",
- "type": "t_contract(LinkTokenInterface)7709",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:79"
+ "type": "t_uint256",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:40"
},
{
- "label": "poolBeacon",
+ "label": "reportTimestamp",
"offset": 0,
"slot": "159",
- "type": "t_contract(IBeaconUpgradeable)8844",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:81"
+ "type": "t_uint256",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:42"
},
{
- "label": "ssvClusters",
+ "label": "reportSweptBalance",
"offset": 0,
"slot": "160",
- "type": "t_contract(ISSVClusters)13288",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:83"
+ "type": "t_uint256",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:44"
},
{
- "label": "ssvToken",
+ "label": "reportBeaconBalance",
"offset": 0,
"slot": "161",
- "type": "t_contract(IERC20Upgradeable)9175",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:85"
+ "type": "t_uint256",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:46"
},
{
- "label": "swapFactory",
+ "label": "reportActivatedDeposits",
"offset": 0,
"slot": "162",
- "type": "t_contract(IUniswapV3Factory)12910",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:87"
+ "type": "t_uint256",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:48"
},
{
- "label": "swapRouter",
+ "label": "reportForcedExits",
"offset": 0,
"slot": "163",
- "type": "t_contract(ISwapRouter)13132",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:89"
- },
- {
- "label": "lastPoolId",
- "offset": 20,
- "slot": "163",
- "type": "t_uint32",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:91"
- },
- {
- "label": "reportPeriod",
- "offset": 24,
- "slot": "163",
- "type": "t_uint32",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:93"
+ "type": "t_uint256",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:50"
},
{
- "label": "functionsId",
+ "label": "reportCompletedExits",
"offset": 0,
"slot": "164",
- "type": "t_uint64",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:95"
+ "type": "t_uint256",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:52"
},
{
- "label": "upkeepId",
+ "label": "reportCompoundablePoolIds",
"offset": 0,
"slot": "165",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:97"
+ "type": "t_array(t_uint32)5_storage",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:54"
},
{
- "label": "latestBeaconBalance",
+ "label": "finalizableCompoundablePoolIds",
"offset": 0,
"slot": "166",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:99"
+ "type": "t_array(t_uint32)5_storage",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:56"
},
{
- "label": "latestBeaconBalanceAfterFees",
+ "label": "reportRequests",
"offset": 0,
"slot": "167",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:101"
+ "type": "t_mapping(t_bytes32,t_enum(RequestType)27584)",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:58"
},
{
- "label": "latestActiveRewardBalance",
+ "label": "reportResponseError",
"offset": 0,
"slot": "168",
- "type": "t_int256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:103"
+ "type": "t_bytes_storage",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:60"
},
{
- "label": "finalizableCompletedExits",
+ "label": "requestSource",
"offset": 0,
"slot": "169",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:105"
+ "type": "t_string_storage",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:62"
},
{
- "label": "finalizableExitedBalance",
+ "label": "defaultRequestArgs",
"offset": 0,
"slot": "170",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:107"
+ "type": "t_array(t_string_storage)dyn_storage",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:64"
},
{
- "label": "finalizableRecoveredBalance",
+ "label": "fulfillGasLimit",
"offset": 0,
"slot": "171",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:109"
- },
- {
- "label": "tokenAddresses",
- "offset": 0,
- "slot": "172",
- "type": "t_mapping(t_enum(Token)19142,t_address)",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:111"
- },
- {
- "label": "users",
- "offset": 0,
- "slot": "173",
- "type": "t_mapping(t_address,t_struct(User)19147_storage)",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:113"
- },
- {
- "label": "stakeRatioSum",
- "offset": 0,
- "slot": "174",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:115"
- },
- {
- "label": "requestedWithdrawals",
- "offset": 0,
- "slot": "175",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:117"
- },
- {
- "label": "requestedWithdrawalBalance",
- "offset": 0,
- "slot": "176",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:119"
- },
- {
- "label": "requestedWithdrawalQueue",
- "offset": 0,
- "slot": "177",
- "type": "t_array(t_struct(Withdrawal)19154_storage)dyn_storage",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:121"
- },
- {
- "label": "poolAddresses",
- "offset": 0,
- "slot": "178",
- "type": "t_mapping(t_uint32,t_address)",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:123"
- },
- {
- "label": "tipBalance",
- "offset": 0,
- "slot": "179",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:125"
- },
- {
- "label": "recoveredBalances",
- "offset": 0,
- "slot": "180",
- "type": "t_mapping(t_uint32,t_uint256)",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:127"
- },
- {
- "label": "prepoolBalance",
- "offset": 0,
- "slot": "181",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:129"
- },
- {
- "label": "exitedBalance",
- "offset": 0,
- "slot": "182",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:131"
- },
- {
- "label": "reservedFeeBalance",
- "offset": 0,
- "slot": "183",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:133"
- },
- {
- "label": "readyPoolIds",
- "offset": 0,
- "slot": "184",
- "type": "t_array(t_uint32)dyn_storage",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:135"
- },
- {
- "label": "pendingPoolIds",
- "offset": 0,
- "slot": "185",
- "type": "t_array(t_uint32)dyn_storage",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:137"
- },
- {
- "label": "stakedPoolIds",
- "offset": 0,
- "slot": "186",
- "type": "t_array(t_uint32)dyn_storage",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:139"
- },
- {
- "label": "requestedExits",
- "offset": 0,
- "slot": "187",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:141"
- },
- {
- "label": "forcedExits",
- "offset": 0,
- "slot": "188",
- "type": "t_uint256",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:143"
+ "type": "t_uint32",
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:66"
},
{
"label": "__gap",
"offset": 0,
- "slot": "189",
+ "slot": "172",
"type": "t_array(t_uint256)50_storage",
- "contract": "CasimirManager",
- "src": "src/v1/CasimirManager.sol:145"
+ "contract": "CasimirUpkeep",
+ "src": "src/v1/CasimirUpkeep.sol:68"
}
],
"types": {
@@ -1147,8 +1162,8 @@
"label": "address",
"numberOfBytes": "20"
},
- "t_array(t_struct(Withdrawal)19154_storage)dyn_storage": {
- "label": "struct ICasimirManager.Withdrawal[]",
+ "t_array(t_string_storage)dyn_storage": {
+ "label": "string[]",
"numberOfBytes": "32"
},
"t_array(t_uint256)49_storage": {
@@ -1159,133 +1174,64 @@
"label": "uint256[50]",
"numberOfBytes": "1600"
},
- "t_array(t_uint32)dyn_storage": {
- "label": "uint32[]",
+ "t_array(t_uint32)5_storage": {
+ "label": "uint32[5]",
"numberOfBytes": "32"
},
"t_bool": {
"label": "bool",
"numberOfBytes": "1"
},
- "t_contract(IAutomationRegistry)20574": {
- "label": "contract IAutomationRegistry",
- "numberOfBytes": "20"
- },
- "t_contract(IBeaconUpgradeable)8844": {
- "label": "contract IBeaconUpgradeable",
- "numberOfBytes": "20"
- },
- "t_contract(ICasimirRegistry)19835": {
- "label": "contract ICasimirRegistry",
- "numberOfBytes": "20"
- },
- "t_contract(ICasimirUpkeep)19910": {
- "label": "contract ICasimirUpkeep",
- "numberOfBytes": "20"
- },
- "t_contract(IDepositContract)20614": {
- "label": "contract IDepositContract",
- "numberOfBytes": "20"
- },
- "t_contract(IERC20Upgradeable)9175": {
- "label": "contract IERC20Upgradeable",
- "numberOfBytes": "20"
- },
- "t_contract(IFunctionsBillingRegistry)20648": {
- "label": "contract IFunctionsBillingRegistry",
- "numberOfBytes": "20"
- },
- "t_contract(IKeeperRegistrar)20676": {
- "label": "contract IKeeperRegistrar",
- "numberOfBytes": "20"
+ "t_bytes32": {
+ "label": "bytes32",
+ "numberOfBytes": "32"
},
- "t_contract(ISSVClusters)13288": {
- "label": "contract ISSVClusters",
- "numberOfBytes": "20"
+ "t_bytes_storage": {
+ "label": "bytes",
+ "numberOfBytes": "32"
},
- "t_contract(ISwapRouter)13132": {
- "label": "contract ISwapRouter",
+ "t_contract(FunctionsOracleInterface)4175": {
+ "label": "contract FunctionsOracleInterface",
"numberOfBytes": "20"
},
- "t_contract(IUniswapV3Factory)12910": {
- "label": "contract IUniswapV3Factory",
+ "t_contract(ICasimirFactory)26854": {
+ "label": "contract ICasimirFactory",
"numberOfBytes": "20"
},
- "t_contract(LinkTokenInterface)7709": {
- "label": "contract LinkTokenInterface",
+ "t_contract(ICasimirManager)27334": {
+ "label": "contract ICasimirManager",
"numberOfBytes": "20"
},
- "t_enum(Token)19142": {
- "label": "enum ICasimirManager.Token",
+ "t_enum(ReportStatus)27588": {
+ "label": "enum ICasimirUpkeep.ReportStatus",
"members": [
- "LINK",
- "SSV",
- "WETH"
+ "FINALIZED",
+ "REQUESTING",
+ "PROCESSING"
],
"numberOfBytes": "1"
},
- "t_int256": {
- "label": "int256",
- "numberOfBytes": "32"
- },
- "t_mapping(t_address,t_struct(User)19147_storage)": {
- "label": "mapping(address => struct ICasimirManager.User)",
- "numberOfBytes": "32"
+ "t_enum(RequestType)27584": {
+ "label": "enum ICasimirUpkeep.RequestType",
+ "members": [
+ "NONE",
+ "BALANCES",
+ "DETAILS"
+ ],
+ "numberOfBytes": "1"
},
- "t_mapping(t_enum(Token)19142,t_address)": {
- "label": "mapping(enum ICasimirManager.Token => address)",
+ "t_mapping(t_bytes32,t_address)": {
+ "label": "mapping(bytes32 => address)",
"numberOfBytes": "32"
},
- "t_mapping(t_uint32,t_address)": {
- "label": "mapping(uint32 => address)",
+ "t_mapping(t_bytes32,t_enum(RequestType)27584)": {
+ "label": "mapping(bytes32 => enum ICasimirUpkeep.RequestType)",
"numberOfBytes": "32"
},
- "t_mapping(t_uint32,t_uint256)": {
- "label": "mapping(uint32 => uint256)",
+ "t_string_storage": {
+ "label": "string",
"numberOfBytes": "32"
},
- "t_struct(User)19147_storage": {
- "label": "struct ICasimirManager.User",
- "members": [
- {
- "label": "stake0",
- "type": "t_uint256",
- "offset": 0,
- "slot": "0"
- },
- {
- "label": "stakeRatioSum0",
- "type": "t_uint256",
- "offset": 0,
- "slot": "1"
- }
- ],
- "numberOfBytes": "64"
- },
- "t_struct(Withdrawal)19154_storage": {
- "label": "struct ICasimirManager.Withdrawal",
- "members": [
- {
- "label": "user",
- "type": "t_address",
- "offset": 0,
- "slot": "0"
- },
- {
- "label": "amount",
- "type": "t_uint256",
- "offset": 0,
- "slot": "1"
- },
- {
- "label": "period",
- "type": "t_uint256",
- "offset": 0,
- "slot": "2"
- }
- ],
- "numberOfBytes": "96"
- },
"t_uint256": {
"label": "uint256",
"numberOfBytes": "32"
@@ -1294,20 +1240,17 @@
"label": "uint32",
"numberOfBytes": "4"
},
- "t_uint64": {
- "label": "uint64",
- "numberOfBytes": "8"
- },
"t_uint8": {
"label": "uint8",
"numberOfBytes": "1"
}
- }
+ },
+ "namespaces": {}
}
},
- "34d2bfbc567f7989d553dd41f6a9c076423df7a32dc9dcc27daf311d99411693": {
- "address": "0x81193D14a78ee889D75D6a921a2146e224388400",
- "txHash": "0x64f417fcb2aaea01905d17f9a0928c41c58563abc6aa6e0f33c1365ed03903a2",
+ "cf432b1f88336fe77bafed4d07579d2ccc74f02990102b4d47f04b90f03ea93e": {
+ "address": "0x4a36fCA81Bc19d64F2A5C75bF32D2292EDf30D70",
+ "txHash": "0xce29eea37e5fcf64f2ab1094e94474f7d8b0e54a81dd2e8821e0258ccedae74b",
"layout": {
"solcVersion": "0.8.18",
"storage": [
@@ -1332,25 +1275,17 @@
"label": "manager",
"offset": 2,
"slot": "0",
- "type": "t_contract(ICasimirManager)19634",
- "contract": "CasimirViews",
- "src": "src/v1/CasimirViews.sol:26"
- },
- {
- "label": "registry",
- "offset": 0,
- "slot": "1",
- "type": "t_contract(ICasimirRegistry)19835",
+ "type": "t_contract(ICasimirManager)27334",
"contract": "CasimirViews",
- "src": "src/v1/CasimirViews.sol:28"
+ "src": "src/v1/CasimirViews.sol:18"
},
{
"label": "__gap",
"offset": 0,
- "slot": "2",
+ "slot": "1",
"type": "t_array(t_uint256)50_storage",
"contract": "CasimirViews",
- "src": "src/v1/CasimirViews.sol:30"
+ "src": "src/v1/CasimirViews.sol:20"
}
],
"types": {
@@ -1362,23 +1297,153 @@
"label": "bool",
"numberOfBytes": "1"
},
- "t_contract(ICasimirManager)19634": {
+ "t_contract(ICasimirManager)27334": {
"label": "contract ICasimirManager",
"numberOfBytes": "20"
},
- "t_contract(ICasimirRegistry)19835": {
- "label": "contract ICasimirRegistry",
+ "t_uint256": {
+ "label": "uint256",
+ "numberOfBytes": "32"
+ },
+ "t_uint8": {
+ "label": "uint8",
+ "numberOfBytes": "1"
+ }
+ },
+ "namespaces": {}
+ }
+ },
+ "dadccbdbcfd30d0bd4f64a08de336225dbec0c43fb40db56427b5c24ba8605f5": {
+ "address": "0x77B83310FDD99fBA70daE91449fe3D0c52F59996",
+ "txHash": "0xad4f2a647c7219e74c48bcdb69949d245eb52e060a65fb54ba2bc40b5d87fab4",
+ "layout": {
+ "solcVersion": "0.8.18",
+ "storage": [
+ {
+ "label": "_initialized",
+ "offset": 0,
+ "slot": "0",
+ "type": "t_uint8",
+ "contract": "Initializable",
+ "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63",
+ "retypedFrom": "bool"
+ },
+ {
+ "label": "_initializing",
+ "offset": 1,
+ "slot": "0",
+ "type": "t_bool",
+ "contract": "Initializable",
+ "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68"
+ },
+ {
+ "label": "__gap",
+ "offset": 0,
+ "slot": "1",
+ "type": "t_array(t_uint256)50_storage",
+ "contract": "ContextUpgradeable",
+ "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36"
+ },
+ {
+ "label": "_owner",
+ "offset": 0,
+ "slot": "51",
+ "type": "t_address",
+ "contract": "OwnableUpgradeable",
+ "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22"
+ },
+ {
+ "label": "__gap",
+ "offset": 0,
+ "slot": "52",
+ "type": "t_array(t_uint256)49_storage",
+ "contract": "OwnableUpgradeable",
+ "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94"
+ },
+ {
+ "label": "_status",
+ "offset": 0,
+ "slot": "101",
+ "type": "t_uint256",
+ "contract": "ReentrancyGuardUpgradeable",
+ "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38"
+ },
+ {
+ "label": "__gap",
+ "offset": 0,
+ "slot": "102",
+ "type": "t_array(t_uint256)49_storage",
+ "contract": "ReentrancyGuardUpgradeable",
+ "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88"
+ },
+ {
+ "label": "managerAddresses",
+ "offset": 0,
+ "slot": "151",
+ "type": "t_mapping(t_uint32,t_address)",
+ "contract": "CasimirFactory",
+ "src": "src/v1/CasimirFactory.sol:42"
+ },
+ {
+ "label": "viewsAddresses",
+ "offset": 0,
+ "slot": "152",
+ "type": "t_mapping(t_uint32,t_address)",
+ "contract": "CasimirFactory",
+ "src": "src/v1/CasimirFactory.sol:44"
+ },
+ {
+ "label": "lastManagerId",
+ "offset": 0,
+ "slot": "153",
+ "type": "t_uint32",
+ "contract": "CasimirFactory",
+ "src": "src/v1/CasimirFactory.sol:46"
+ },
+ {
+ "label": "__gap",
+ "offset": 0,
+ "slot": "154",
+ "type": "t_array(t_uint256)50_storage",
+ "contract": "CasimirFactory",
+ "src": "src/v1/CasimirFactory.sol:48"
+ }
+ ],
+ "types": {
+ "t_address": {
+ "label": "address",
"numberOfBytes": "20"
},
+ "t_array(t_uint256)49_storage": {
+ "label": "uint256[49]",
+ "numberOfBytes": "1568"
+ },
+ "t_array(t_uint256)50_storage": {
+ "label": "uint256[50]",
+ "numberOfBytes": "1600"
+ },
+ "t_bool": {
+ "label": "bool",
+ "numberOfBytes": "1"
+ },
+ "t_mapping(t_uint32,t_address)": {
+ "label": "mapping(uint32 => address)",
+ "numberOfBytes": "32"
+ },
"t_uint256": {
"label": "uint256",
"numberOfBytes": "32"
},
+ "t_uint32": {
+ "label": "uint32",
+ "numberOfBytes": "4"
+ },
"t_uint8": {
"label": "uint8",
"numberOfBytes": "1"
}
- }
+ },
+ "namespaces": {}
}
}
}
diff --git a/contracts/ethereum/.prettierrc.json b/contracts/ethereum/.prettierrc.json
new file mode 100644
index 000000000..b00ea5d9b
--- /dev/null
+++ b/contracts/ethereum/.prettierrc.json
@@ -0,0 +1,15 @@
+{
+ "overrides": [
+ {
+ "files": "*.sol",
+ "options": {
+ "printWidth": 120,
+ "tabWidth": 4,
+ "useTabs": false,
+ "singleQuote": false,
+ "bracketSpacing": false,
+ "explicitTypes": "preserve"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/contracts/ethereum/README.md b/contracts/ethereum/README.md
index f37ff9bbb..3c81a2413 100644
--- a/contracts/ethereum/README.md
+++ b/contracts/ethereum/README.md
@@ -2,16 +2,6 @@
Solidity contracts for decentralized staking on Ethereum
-## About
-
-Currlently stakers either need to solo-stake (and have least 32 Ether), or they need to pool their assets in a liquid staking protocol (LSD). While the former choice is a reliably secure choice for Ether holders (if they have solid infrastructure), the latter, LSDs, often present an inherent counterparty risk to the user because of their centralized control of staking node operators (see [The Risks of LSD](https://notes.ethereum.org/@djrtwo/risks-of-lsd)).
-
-Casimir is designed to offer users the experience and security of solo-staking while pooling their assets. The Casimir contracts seamlessly connect stakers with any amount of Ether to a permissionless registry of high-performing node operators. Casimir aims to minimize counterparty risk for users and improve decentralization in Ethereum staking:
-
-- Validators duties are performed by registered (collateralized) operators running distributed validator technology (DVT)
-- Keys are created and reshared using distributed key generation (DKG)
-- Automated balance and status reports are carried out by a decentralized oracle network (DON)
-
## Development
**All testing and development commands should be run from the repository root.**
@@ -32,69 +22,6 @@ To directly run any script in the [@casimir/ethereum package.json](https://githu
npm run |